專題四:指標和陣列(下)。包括以下章節:
指標變數在記憶體中會占用一定的空間可以定義指標來儲存指標變數的位址值為什麼需要指向指標的指標?
指標在本質上也是變數
對於指標也同樣存在傳值呼叫與傳址呼叫
2-1.c
#include
#include
//char** p:p指向的是乙個char*指標
//int size:原本的空間大小
//int new_size:設定新的空間大小
int reset(char**p, int size, int new_size)
else
return ret;
}int main()
if( reset(&p, 3, 12) )
return
0;}
結果:
二維陣列在記憶體中以一維的方式排布二維陣列中的第一維是一維陣列二維陣列中的第二維才是具體的值二維陣列的陣列名可看做常量指標
//int a[3][3]:a是乙個指向指標的指標(int** p)
//第一維是乙個指標陣列,元素型別為int(*)[3],內容為:[a[0], a[1], a[2]]
//第二維是乙個int[6]型別陣列,元素型別是int,內容為:[0, 1, 2, 3, 4, 5, 6, 7, 8]
printf("%0x\n", &a); //&a指標型別:int(*)[3]
printf("%0x\n", a); //a指標型別:int(*)[3];a指向a[0]的位址(指向一維陣列的第乙個元素的位址)
printf("%0x\n", a[0]); //a[0]指標型別:int(*)[3]
printf("%0x\n", &a[0][0]); //&a[0][0]指標型別:int*
printf("%0x\n", a[1]);
printf("%0x\n", &a[1][0]);
printf("%0x\n", a[2]);
printf("%0x\n", &a[2][0]);
printf("%d\n", a[0][0]);
printf("%d\n", a[1][0]);
printf("%d\n", a[2][0]);
printarray(p, 9);
return
0;}結果:
一維陣列名代表陣列首元素的位址
int a[5] ==> a的型別為int*
二維陣列名同樣代表陣列首元素的位址
int m[2][5] ==> m的型別為int()[5]//&m型別:int()[5]
結論
(1). 二維陣列名可以看做是指向陣列的常量指標
(2). 二維陣列可以看做是一維陣列
(3). 二維陣列中的每個元素都是同型別的一維陣列
2-3.c
#include
int main()
結果:
結果:
0;}結果:
c語言中只有一維陣列,而且陣列大小必須在編譯期就作為常數確定c語言中的陣列元素可是任何型別的資料,即陣列的元素可以是另乙個陣列(的指標)c語言中只有陣列的大小和陣列首元素的位址是編譯器直接確定的
多維陣列和多維指標
指向指標的指標 指標變數在記憶體中會占用一定的空間 可以定義指標來儲存指標變數的位址 int pp本質上還是指標,只是兩個 告訴你這是乙個指向指標的指標char p null char p2 p p2 給p賦值沒有問題,但怎麼使用p 呢?這就需要我們前面多次提到的鑰匙 第一步 根據 p 這個變數,取...
多維陣列 和 多維指標
指標變數在記憶體中會占用一定的空間。可以定義指標來儲存指標變數的位址值。舉例 舉例說明,多級指標的使用,重置動態空間大小 include include int reset char p,int size,int new size else return ret int main return 0 ...
多維陣列和多維指標
int main 示例 功能 重置動態空間大小 include include int reset char p,int size,int new size printf n printf n printarray p,9 return 0 執行結果 示例 功能 動態申請二維陣列 include i...