指標變數在記憶體中會占用一定的空間。
可以定義指標來儲存指標變數的位址值。
舉例:
舉例說明,多級指標的使用,重置動態空間大小
#include
#include
int reset(char**p, int size, int new_size)
else
return ret;
}int main()
return
0;}
在上面的程式中,函式要改變外部的指標所指向的位置,因此需要用到傳址呼叫,因此需要定義指向指標的指標。
c語言中只有一維陣列。
二維陣列在記憶體中以兩個一維陣列的方式排布。
二維陣列中的第一維是一維陣列,陣列的每個元素為一維陣列。
二維陣列中的第二維才是具體的值。
二維陣列的陣列名可看做常量指標。
特別注意:在定義二維陣列時,第一維可以不寫陣列大小,但是第二位必須要寫上陣列的大小,如下所示:
int a[5]=,};
這是因為必須要定義第一維陣列元素的型別,上面a中第一維陣列的型別就是int(*)[5],指向5元素陣列的指標。
二維陣列在記憶體中的存放形態不是矩陣。
一維陣列名代表陣列首元素的位址
int a[5] a的型別為int*
二維陣列名同樣代表陣列首元素的位址,只不過該陣列的每個元素都是陣列,二位陣列名是乙個陣列指標,而且是常量。
int m [2] [5] 陣列名m的型別為int(*)[5],乙個指向5個int元素陣列的指標。
結論:
二維陣列名可以看做是指向陣列的常量指標
二維陣列在物理儲存上可以看做是一維陣列
二維陣列中的每個元素都是同型別的一維陣列
#include
int main()
問:這裡列印的數值是多少?答案:-4
解釋:由於p指標的型別為int[4]而陣列名a的型別為int[5],因此&p[4] [2] 和 &a [4] [2] 的偏移位址有所不同。計算方法如下:
&p[4] [2] = 4*4+2 =18
&a[4] [2] = 5*4+2 =22, 這樣結果就是-4。
指標後面加[ ] ,就是移動位址的意思。
int main(int argc, char* argv, char* env)
, , };
int i = 0;
int j = 0;
for(i=0; i<3; i++)}}
上述**的輸出是0,1,2,3,4,5,6,7,8
* 星號相當於定址,a[i] [j] = * (a[i] + j) = * ( *(a+i) + j)
#include
int** malloc2d(int row, int col)
}else
return ret;
}void free2d(int** a)
c語言中只有一維陣列,而且陣列大小必須在編譯期就作為常數確定。
c語言中的陣列元素可是任何型別的資料,即陣列的元素可以是另乙個陣列。
c語言中只有陣列的大小和陣列首元素的位址是編譯器直接確定的。
多維陣列和多維指標
指向指標的指標 指標變數在記憶體中會占用一定的空間 可以定義指標來儲存指標變數的位址 int pp本質上還是指標,只是兩個 告訴你這是乙個指向指標的指標char p null char p2 p p2 給p賦值沒有問題,但怎麼使用p 呢?這就需要我們前面多次提到的鑰匙 第一步 根據 p 這個變數,取...
多維陣列和多維指標
專題四 指標和陣列 下 包括以下章節 指標變數在記憶體中會占用一定的空間可以定義指標來儲存指標變數的位址值為什麼需要指向指標的指標?指標在本質上也是變數 對於指標也同樣存在傳值呼叫與傳址呼叫 2 1.c include include char p p指向的是乙個char 指標 int size 原...
多維陣列和多維指標
int main 示例 功能 重置動態空間大小 include include int reset char p,int size,int new size printf n printf n printarray p,9 return 0 執行結果 示例 功能 動態申請二維陣列 include i...