Why do “a+1” and “&a+1” give different results when “a” is an int array?

后端 未结 2 1394
后悔当初
后悔当初 2020-12-19 02:35
int main()
{
    int a[]={1,2,3,4,5,6,7,8,9,0};

    printf(\"a = %u , &a = %u\\n\",a,&a);
    printf(\"a+1 = %u , &a+1 = %u\\n\",a+1,&a+1);
}
         


        
2条回答
  •  执念已碎
    2020-12-19 02:56

    Both statements print out addresses and are probably meant to explain pointer arithmetic.

    a and &a are NOT the same, they have different types, but hold the same memory address.

    &a is of type int (*)[10] (which acts like a pointer to an array)
    a is of type int [10] (which acts like a pointer to a single element)

    So when you add 1 keep those types in mind. The pointer will be offset by the size of the type that the address contains. a+1 offsets by the size of int, i.e. to the second element in the array. &a+1 offsets completely past the whole array.

提交回复
热议问题