- 博客(6)
- 收藏
- 关注
原创 函数栈帧与可变参数列表
一:函数栈帧 关于函数栈帧,我们首先需要认识下有关的寄存器: eax:通用寄存器,保留临时数据,常用于返回值 ebx:通用寄存器,保留临时数据 ebp:栈底寄存器 esp:栈顶寄存器 eip:指令寄存器,保存当前指令的下一条指令的地址 之后我们需要了解一下汇编命令 mov:数据转移指令(格式为move 目的,源) push:数据入栈,同时esp栈顶寄存器也要发生改变(压栈) pop:数据弹出至指定位置,同时esp栈顶寄存器也要发生改变(弹栈) sub:减法命令 add:加法命.
2021-11-18 15:01:33
382
原创 小车问题求解
有一辆智能小车,最初(时间为0)的位置为(0,0),我们想知道它最后的位置。小车以每小时10公里的速度向北移动(以北为y轴正向,以东为x轴正向)。小车会受到一系列依照时间戳记排序的命令,1表示“向左转”,2表示“向右转”,3表“停止”。每个命令的前面有一个时间戳记,所以我们知道该命令是何时发出的。最后一个命令一定是“停止”。我们另外假设,这辆小车非常灵活,它可以在瞬间转弯。 以下列输入为例。小车在时间为5的时候收到一个“向左转”的命令1,在时间10收到一个“向右转”的命令2,在时间15收到一个“停止”的命.
2021-10-30 13:00:57
292
2
原创 指针奇葩笔试题(提升对指针的理解)
#include<stdio.h> int main() { int a[4] = { 1, 2, 3, 4 }; int* ptr1 = (int*)(&a + 1); int* ptr2 = (int*)((int)a + 1); printf("%x,%x", ptr1[-1], *ptr2); return 0; } 需要强调的是ptr2,a强制类型转换为int型再+1,再转化为int*类型,是指真正的在地址上+1,众所周知int类型大.
2021-10-17 14:51:59
174
原创 sizeof和二维数组的关系
#include<stdio.h> int main() { int a[3][4] = { 0 }; printf("%d\n", sizeof(a));//48 sizeof传入的是二维数组的数组名,得到的值是整个数组的大小 printf("%d\n", sizeof(a[0][0]));//4 printf("%d\n", sizeof(a[0]));//16 a[0]可以认为是第一行的数组名,sizeof数组名得到的是第一行的大小 printf("%d\n", sizeo.
2021-10-11 18:28:20
267
原创 整形数据存储与浮点型数据存储
char 类型与unsigned int ,int类型在内存中存储的关系理解 我们可以知道如果一个整数存入变量中,先以整形大小的二进制补码出现,之后按照类型大小截取相应的大小,如果要打印%d,%u这种整形类型的数据的话,%d要转化为原码的大小,%u则以无符号的打印 总结:定义使的变量的类型是很重要的,决定了变量之后在内存中的视角 浮点型数据在内存中存储 先看例子 这个例子可以说明浮点数的数据存储和整形家族的数据存储不一样 如何存储呢 根据规定: (-1)^S * M *...
2021-10-10 22:11:09
197
原创 移位操作符以及位运算操作符
首先:移位操作符和运算操作符均是可以理解为整数储存在内存的二进制形式 使用该两种操作符会使该数二进制的大小发生改变,也就是数值的改变 而运算操作符往往具有特定的使用技巧 1.移位操作符 <<左移操作符 >>右移操作符 (移位操作符操作的对象只能是整数) <<左移操作符 移位规则:左边抛弃,右边补0 但事实是如果a没有被赋值,a的值不会被改变 >>右移操作符 警告⚠ : 对于移位运算符,不要移动负数位,这...
2021-10-09 15:19:37
464
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人