任何人都可以解释ptr + 1和ptr [0] +1之间的区别

时间:2017-08-20 20:10:46

标签: c arrays pointers

假设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);
}

1 个答案:

答案 0 :(得分:4)

如果我正确理解了您的问题,那么您有一系列指向intint *)的指针。你希望第二个元素的地址比第一个元素的地址高四个字节,你问为什么不是这样呢?

如果这确实是你的问题,答案是指针的大小不一定与int的大小相同。

在64位编译器上,指针的大小通常是8个字节,而int的大小可能是4个字节。

您可以打印出sizeof(int)sizeof(int *)来清楚地看到这一点。