问题在标题中给出: 我不知道为什么会这样。 有人能告诉我这些技巧是如何运作的。
这是我的代码:
#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;
}
输出:
0x7fffc068708c
0x7fffc068708c
320
64
答案 0 :(得分:6)
只存储了一个值。
第二个printf在该地址获取第一个char
的数据,将其提升为int
,并打印结果。第一个打印整个int
。
(320 == 256 + 64
或0x140 == 0x01 0x40
)
答案 1 :(得分:5)
0x7fffc068708c
的实际数据为0x00000140
。
这是十进制的320。
但是如果您通过ptr =( char *)&a;
访问它,那么您只能获得0x40
。
这是十进制的64。
答案 2 :(得分:3)
简单,真的:使用char
指针,你可以摆脱一个字节以上的任何额外数据:
a = 320
0x 00 00 00 00 01 40
| a | -> 0x 00000140 = 320
|ptr| -> 0x 40 = 64
您“看到”两个值,因为您没有使用所有可用的精度。
如果您使用了short而不是char,那么您将“看到”一个值,但实际上,只是如何解释数据。
答案 3 :(得分:0)
关键是在为ptr分配一个时,你说它是一个指向一个字符而不是一个整数的指针。改变并尝试