#include
#include
void arr_test(char arr)
{
(((char *)arr+1) ++;
}
int main()
{
int i;
int arr[4] = {1,2,3,4};
arr_test(arr);
for(i = 0; i < 4; i++)
printf("%d \n",arr[i]);
exit(0);
}
最後結果為什麼是:257 2 3 4。求探討 告知!!
首先int占4個字節,我們現在大部分的PC都是小端模式(低位字節低地址)
所以arr[0]為1的話,在內存中的存儲是0000 0001 0000 0000 0000 0000 0000 0000
用char *指針去指向arr的話,(char *)arr+1代表的就是arr[0]第二個字節所在,即0000 0000
然後++變成了0000 0001
所以arr[0]所在內存變成了0000 0001 0000 0001 0000 0000 0000 0000,即257
arr[1],arr[2],arr[3]都沒變
注:樓主這個代碼在我的VS裡都編譯不過去。。。