C/C++指针与类型转换

int x = 10;
void *ptr = &x;
printf("%dn", *(int *)ptr); // 输出:10

copy success
1
2
3
4

在以上代码中,我们首先定义一个整型变量x,然后定义一个void指针ptr,并将其初始化为指向x的地址。然后,我们不能直接使用 *ptr 来获取x的值,因为ptr是void指针。我们必须先将ptr强制类型转换为 int * ,然后就可以使用 *(int *)ptr 来获取x的值。


负数的二进制表现形式: (从二进制算要加1 从数字算要减1) 负数 -> 二进制 = (绝对值 - 1) 再按位取反 二进制负数 -> 负数 = 按位取反得出的数再加1

20240417222944_image.png 20240417223049_image.png 20240417223604_image.png 20240417223800_image.png 20240417223841_image.png 20240417223928_image.png

使用xdb64调试一段程序验证 传递多个参数 20240416222643_image.png

windows

rcx,rdx,r8,r9 用来存储整数或指针参数,按照从左到右的顺序 xmm0,1,2,3 用来存储浮点参数 其余参数会压入栈中。 20240416221922_image.png 20240416222020_image.png

linux

64位汇编参数传递 (opens new window) 20240416220827_image.png 20240416220900_image.png 20240416220953_image.png