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.我误解了什么吗?
类型&arr是'指向数组10 int的指针'.因此,当你向它添加一个(&arr+1)时,它会移动到下一个10的数组的开头,即10 int个字节的开头&arr.
你认为是对的,它只是这样做的.
因为&arr=> 0xbfe41348和
0xbfe41348+ 0x28(4*10十进制)=0xbfe41370
我认为你因十进制数加十进制而感到困惑.