开发者

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

开发者 https://www.devze.com 2023-01-03 01:52 出处:网络
开发者_运维百科int main() { int a[]={1,2,3,4,5,6,7,8,9,0}; printf(\"a = %u , &a = %u\\n\",a,&a);
开发者_运维百科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);
}

how a and &a are internally interpreted?


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.


Well, a is the address of the first element of the array, and &a is the address of the array, but obviously they both have the same address.

However when you add (or subtract) a number from a pointer the compiler takes the size of the data into consideration thus in your case (assuming the size of int is 4 bytes) a+1 will be bigger than a by 4 because you move the pointer one integer ahead, but &a+1 would be bigger by 40 because you more the pointer one ARRAY OF 10 INTEGERS ahead.

0

精彩评论

暂无评论...
验证码 换一张
取 消