指针的值是变量的地址。为什么int pointer
的值在int指针增加1后增加了4个字节。为什么int指针'++'增加4而不是1?
在我看来,我认为指针增量后指针(地址变量)的值只增加1个字节。
测试代码:
int a = 1, *ptr;
ptr = &a;
printf("0x%X\n", ptr);
ptr++;
printf("0x%X\n", ptr);
预期输出:
0xBF8D63B8
0xBF8D63B9
实际输出:
0xBF8D63B8
0xBF8D63BC
编辑:
的其他问题 - 如何访问4个字节一个int
占用一个接一个?
“你不能增加'void *',因为'void'是一个不完整的类型” - true,但是gcc支持'void *'上的算术作为扩展(它把它看作是'char *')。 – 2016-01-13 18:57:07
“它对于一个整数几乎总是没有意义”,但对于像可变长度结构数组这样的情况来说它是非常有意义的(“我有一个缓冲区充满了数据包,我想将CurrentPacketPointer移动到下一个包”)。 – 2016-08-15 03:05:54
“如果你真的想移动一个字节,增加一个char *:char的大小总是为1”不,它不总是一个,你应该使用'uint8_t'来代替。 – Winter 2017-07-17 16:11:07