#include<stdio.h>
int main()
{
unsigned int a=0xabcdef12;
char *c=(char *)&a;
int i;
for(i=0;i<4;i++)
{
printf("%x.....%x\n",*c,c);
c++;
}
return 0;
}
O / P:
12.....bfad5bd4
ffffffef.....bfad5bd5
ffffffcd.....bfad5bd6
ffffffab.....bfad5bd7
如果您在第一次打印时看到它正在打印12,但在所有后续打印中,它打印的值正确,但用ffffff填充。有人可以解释这个差异吗?
答案 0 :(得分:0)
你在乱搞指针。小心那里。这条线
char *bit_longer_name=(char *)&a;
表示“指向CHAR类型数据数组的gimme指针,并将其称为'bit_longer_name'。数组在变量'a'地址处初始化”。现在当你做
bit_longer_name++
它实际上将指针向前移动到内存中 - 转到数组中的下一个元素 - 就像my_char_array [i]那样。你有那里的印刷品:
printf("%x.....%x\n",*c,c);
第一部分打印“我指向的当前数组单元格的值”,你实际上传递了printf的无效值(你应该从那里得到警告!),这会导致编译器从中读取记忆点由'c'指示( - &gt;它首先工作)。
另一方面,第二部分是“我用'c'指向的地址”,正如你所见,它向前移动。