前一段時間做了乙個關於二維陣列和二重指標的互相賦值的實驗,很有意思,特記錄下來。由於陣列是指標的語法糖,所以我之前一直認為兩者可直接進行賦值轉換。後來發現在二維陣列中這樣做是不可行的,現將實驗現象記錄如下:
實驗:
#include int main(int argc,char *ar**)
,}; int **p1=a; //報錯
int *p2[5]=a; //賦值給指標陣列,報錯
int (*p3)[5]=a; //賦值給陣列指標,不報錯
printf("a[0][1]=%d.\n",*(*p3+1));
return 0;
}
我的觀點:首先a做右值,是乙個位址,它的值等於首元素的首位址,那麼首元素是什麼?是陣列,(當然也等於首個陣列元素中的元素的首位址)。所以a的值是乙個陣列的位址。二重指標的值是什麼?一重指標的位址;指標陣列的值是什麼?int型指標的位址;陣列指標的值是什麼?陣列的首位址。所以由此看來,一重指標的位址和一維陣列的位址性質是不一樣的,原因我猜可能跟物件導向思想中例項化有關。陣列有實實在在的一段記憶體,而單純的指標如果沒有例項化,則沒有。
由此可見,二維陣列和二重指標不是一回事,不能隨便賦值!
如有不對的地方,敬請批評指正!
27 二重指標和二維陣列
因格式問題,截圖上傳。27.double pointer 公司 x 部落格 github 專案 二重指標和二維陣列 功能 演示二重指標的用法。include void func int p int main int argc,char argv 定義指標陣列,陣列元素為int 型別 int p5 a...
C語言指標的理解五 二重指標與二維陣列
2.二維陣列 本質上來說,二重指標和一重指標的本質都是指標變數,占用相同的記憶體空間,而指標變數的本質就是變數。二重指標本質上也是指標變數,和普通指標的差別就是它指向的變數型別必須是個一重指標。二重指標其實也是一種資料型別,編譯器在編譯時會根據二重指標的資料型別來做靜態型別檢查,一旦發現運算時資料型...
二維陣列與二維指標
1.二維陣列的儲存是線性的,可以通過一維指標的方式訪問。如一下 int map 5 5 int mapd map 0 0 則 map i j mapd i 5 j 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...