我的问题是为什么第二个printf显示所有相同的地址,但第四个显示不同的数字? 我在intel上使用gcc 4.8.2编译它,在某些Linux发行版上编译64位。
前两个pritfs应该打印内存地址(不计算第一行的第一个数字。
第二个和第三个从第1和第2个printfs指针给出的内存中打印char值。
以下代码
#include<stdio.h>
int main()
{
char *ptr;
int numer;
numer = 0xAABBCCDD;
ptr=&numer;
printf("---\n%x\n %x %x %x %x\n",
numer,
(ptr),
(ptr++),
(ptr++),
(ptr++)
);
ptr=&numer;
printf("---\n%x\n %x %x %x %x\n",
numer,
(++ptr),
(++ptr),
(++ptr),
(ptr)
);
ptr=&numer;
printf("---\n%x\n %x %x %x %x\n",
numer,
*(ptr),
*(ptr++),
*(ptr++),
*(ptr++)
);
ptr=&numer;
printf("---\n%x\n %x %x %x %x\n",
numer,
*(++ptr),
*(++ptr),
*(++ptr),
*(ptr)
);
return 0;
}
产生输出:
/a.out
---
aabbccdd
53209c77 53209c76 53209c75 53209c74
---
aabbccdd
53209c77 53209c77 53209c77 53209c77
---
aabbccdd
ffffffaa ffffffbb ffffffcc ffffffdd
---
aabbccdd
ffffffaa ffffffbb ffffffcc ffffffdd