假设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);
}
答案 0 :(得分:4)
如果我正确理解了您的问题,那么您有一系列指向int
(int *
)的指针。你希望第二个元素的地址比第一个元素的地址高四个字节,你问为什么不是这样呢?
如果这确实是你的问题,答案是指针的大小不一定与int
的大小相同。
在64位编译器上,指针的大小通常是8个字节,而int的大小可能是4个字节。
您可以打印出sizeof(int)
和sizeof(int *)
来清楚地看到这一点。