指標與陣列的記憶體分配

2021-08-20 11:28:49 字數 1140 閱讀 9441

部落格搬家:

在實踐中經常遇到這樣的情況:①二維陣列、②指向指標的指標、③指標陣列、④陣列指標 的使用,經常容易混淆,這裡從記憶體分配的情況進行對比

①二維陣列

char a[2][3];二維陣列的記憶體分配情況

②指向指標的指標

char **p1;指標的指標在記憶體分配時先為指標p1(外層)分配記憶體 :

p1 = (char **)malloc(row*sizeof(char *))

(這裡使用row為1);再為內層(即p1指標上的內容指標*p)分配記憶體

*p = (char *)malloc(col*sizeof(char));

(這裡使用col為2);其記憶體分配情況

③指標陣列

char *p2[3];指標陣列:即乙個陣列,並且陣列的每個元素都是指標型別;由於「」的優先順序要高於「*」的優先順序,故外層指標的最大偏移量為2,內層指標的最大偏移量具體有不規則性;其記憶體分配情況

④陣列指標

char (*p3)[3];陣列指標:即指向陣列的指標;由於「()」優先順序高於」」,故外層指標的最大偏移量不確定,具體在申請記憶體時決定,而內層指標的最大偏移量是固定的為2,即每個外層指標都指向乙個含有3個元素的陣列;其記憶體分配情況

從記憶體分配的對比中可以了解到,陣列在記憶體中的分配的空間是連續、最大偏移量時固定的;但在二級指標、指標陣列、陣列指標中,最大偏移量是不確定的,並且記憶體分配空間也不一定是連續的。就拿二級指標來說,一次性分配記憶體空間時是連續的,但是如果先分配外層記憶體空間再分配內層記憶體空間,此時極有可能是不連續的。

C C 指標 陣列和記憶體分配

指標表示的是變數的位址與值的關係 指標的定義 int p 指向整型變數的指標 struct point point p typedef int pint 使用pint代替int pint p,q 定義了兩個指向整型的指標變數p,q 指標變數指向變數的位址 1.指向變數的指標 int p p n 等同...

字元陣列 與 字元指標(使用前分配記憶體)

1.字元指標可以指向乙個字串。我們可以用字串常量對字元指標進行初始化。例如,有說明語句 char str this is a string.是對字元指標進行初始化。此時,字元指標指向的是乙個字串常量的首位址,即指向字串的首位址。這裡要注意字元指標與字元陣列之間的區別。例如,有說明語句 char st...

指標記憶體分配

1 一維指標記憶體分配。作陣列使用時 int p null 儲存int型別資料 int n 7 陣列長度 p int malloc sizeof int n int i for i 0 i0 free p 釋放2 指標陣列記憶體分配 int n 6 int p n 儲存int指標型別資料的陣列 p ...