C程序地址增加数组和数组名称

web*_*ker 2 c arrays memory-address

int arr[10]={1,2,3,4,5,6,7,8,9,10};
printf("%p,%p\n", arr, &arr);
printf("%p,%p\n", arr+1, &arr+1);
return 0;
Run Code Online (Sandbox Code Playgroud)

对于此代码,GCC编译器返回

0xbfe41348,0xbfe41348
0xbfe4134c,0xbfe41370
Run Code Online (Sandbox Code Playgroud)

第一行很清楚,没问题.但第二行让我感到困惑.第一个地址移动到下一个int,所以它是4个字节后arr,清除.但是,因为&arr+1我认为它将指向整个数组的末尾arr[10],所以它应该向地址添加4*10.我误解了什么吗?

Jon*_*ler 6

类型&arr是'指向数组10 int的指针'.因此,当你向它添加一个(&arr+1)时,它会移动到下一个10的数组的开头,即10 int个字节的开头&arr.

  • @ThoAppelsin那些重新措辞可能有时候是oooohhhh !!! (我现在明白了)因素.... :) (2认同)

Don*_*ild 6

你认为是对的,它只是这样做的.

因为&arr=> 0xbfe41348

0xbfe41348+ 0x28(4*10十进制)=0xbfe41370

我认为你因十进制数加十进制而感到困惑.