假设sizeof
整数为 4 个字节, sizeof(int *) 为 8 个字节,我不明白为什么 ptr +1 向前移动了 8 个字节的大小,而 ptr[0]+1 向前移动了 4 个字节的大小。
int main()
{
int a[] = {1, 2, 3};
int *ptr[3]; //array of 3 elements pointed to integer
int *b;
ptr[0] = a;
printf("a: %lu\n", a);
printf("a + 1: %lu\n\n", a+1);
printf("ptr: %lu\n", ptr);
printf("ptr + 1: %lu\n", ptr+1);
printf("ptr[0]: %lu\n", ptr[0]);//ptr[0] holds base address of array a
printf("ptr[1]: %lu\n\n", ptr[0] + 1 );
printf("&ptr: %lu\n", &ptr);
printf("&ptr + 1: %lu\n", &ptr+1);
}
如果我正确理解你的问题,你就有一个指向int
( int *
)的指针数组。你期望第二个元素的地址比第一个元素的地址高四个字节,你问为什么不是这样?
如果这确实是您的问题,那么答案是指针的大小不一定与 的大小相同int
。
在 64 位编译器上,指针的大小通常为 8 个字节,而 int 的大小可能为 4 个字节。
您可以打印出来sizeof(int)
并sizeof(int *)
清楚地看到这一点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句