我的问题是为什么第二个 printf 显示所有相同的地址,但第四个显示不同的数字?我在英特尔的 gcc 4.8.2 下编译它,在一些 Linux 发行版上是 64 位。
前 2 个 pritfs 应该打印内存地址(不计算第一个数字,它是第一行中的 int 值。
第二个和第三个从第一个和第二个 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