程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> printf-關於指針強轉的步長問題

printf-關於指針強轉的步長問題

編輯:編程解疑
關於指針強轉的步長問題

#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裡都編譯不過去。。。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved