C語言一個小小的問題引起的對指針的探究。。。
廢話不多說。下面是這個大家認識的一個及其簡單的程序:
1 #include <stdio.h> 2 void A(int a[]) 3 { 4 printf("%d/t", sizeof(a)); 5 } 6 int main() 7 { 8 int a[512]; 9 int *p; 10 printf("%d/t", sizeof(a)); 11 A(a); 12 printf("%d/n", sizeof(p)); 13 return 0; 14 }?
這個程序大家先看一遍再拿到編譯器里運行調試,發現什么了沒?輸出的是512?????? 4(2) ?? 4(2)。 我今天下午查了些資料,才知道了,原來是自己基礎沒掌握好,現在我就來解釋下:
???????? 第一個輸出512,是因為它是一個數組,所以輸出了整個數組所站的總共的內存字長大小。但為什么后面輸出的是4呢???原來啊,編譯器在對數組進行地址參數傳遞的時候,復制了內存地址,結果就使得數組直接變成指針了。。就是這個原因~但為什么輸出的是4(2)呢???呵呵,這個就是指針的構成了,其實所有的指針都只是一個無符號的整形數。。我的編譯環境是32位的linux。處理器尋址能力為2^32-1,相當于就是站了4個字節空間的大小。但在DOS(TC)環境下編譯,由于dos是16位的,所以就只輸出的2咯~~
?
posted on 2012-06-02 08:59 依舊濤 閱讀(...) 評論(...) 編輯 收藏