问题在标题中给出:我不知道为什么会发生这种情况.有人能告诉我这些技巧是如何运作的.
这是我的代码:
#include<stdio.h>
int main(){
int a = 320;
char *ptr;
printf("%p\n",&a);
ptr =( char *)&a;
printf("%p\n",ptr);
printf("%d\n",a);
printf("%d\n",*ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
0x7fffc068708c
0x7fffc068708c
320
64
Run Code Online (Sandbox Code Playgroud)
只存储一个值.
第二个printf获取该char
地址的第一个数据,将其提升int
并打印结果.第一个打印整体int
.
(320 == 256 + 64
,或0x140 == 0x01 0x40
)
实际数据0x7fffc068708c
是0x00000140
.
这是小数点的320.
但是如果你通过它访问它ptr =( char *)&a;
,那么你只能得到它0x40
.
这是十进制的64.