陣列 指標 動態陣列之間的關係

2021-08-04 04:50:15 字數 1526 閱讀 1528

敲**時候需要動態宣告乙個二維陣列,然後開始然,然不清,然後發現指標也然不清了...然後總結一些筆記關於陣列,指標,malloc,free。
//陣列與指標關係

int a;

int *p;

p=&a;

//malloc

int *p=(int *)malloc(sizeof(int ));

//free

free(p);

//陣列與指標關係

int a[n];

int *p;

p=a;

//malloc

int *p=(int *)malloc(sizeof(int )*n);

//free

free(p);

1.陣列指標

//陣列與指標關係

int a[n][m];

int (*p)[m]=a; //(*p)是乙個指標,型別是int(*)[m];即指向int型的長度為m的一維陣列,(因為之前a宣告的陣列大小是n*m,所以可以通過p++或p[n]來訪問不同行,這裡也可以看出一點二維陣列a在定義的時候的型別是int (*)型,這也許就是不能把乙個二維陣列賦給乙個二級指標的原因)

//malloc(這裡面用malloc 必須是要知道m(你知道我說的m特指什麼));

int (*p)[m]=(int (*)[m])malloc(sizeof(int)*n*m);

//free

free(p);

2.指標陣列

//陣列與指標關係

int a[n][m];

int *p[n];//p[n]是乙個陣列,什麼陣列呢,int *型;即乙個長度為n的一維陣列儲存的是int*型的指標。(這樣我們就可以把a[n]乙個乙個賦值給p[n])

for(i=0;i//malloc(這裡的malloc需要知道n,you know that)

int *p[n];

for(i=0;iint *)malloc(sizeof(int )*m);

//free(這裡p是乙個陣列不用free,需要free掉的是陣列儲存的指標指向的的空間)

for(i=0;i;

//陣列與指標關係

int a[n][m];

int **p;

p=a;//哈哈,你會發現他會說型別不符,至於為什麼上面說了

p=&a;//哈哈,你會發現他還是會說型別不符,至於為什麼和剛剛一樣

//malloc(這裡malloc和指標陣列類似,相當於是找了乙個二級指標去指向那個指標陣列)

int **p;

p=(int **)malloc(sizeof(int *)*n);

for(i=0;iint *)malloc(sizeof(int )*m);

//free(這裡要先將一級指標釋放,然後講二級指標釋放)

for(i=0;ifree(p[i]);

free(p);

指標陣列和陣列指標之間關係

指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣列的指標 的簡稱。1 int ptr1 10 2 int...

指標與陣列,指標與函式之間的關係

指標陣列,它的關鍵在於是乙個陣列,即陣列中每個元素都是指標。陣列指標,他的關鍵在於是指標變數,即這個指標指向乙個陣列。include int main 這是乙個陣列,大家都知道。int parr1 4 這是指標陣列,首先的優先順序比 的優先順序高,所以parr 先與結合,它是乙個陣列,然後再與 結合...

指標與陣列之間的關係與轉換

一 指向指標的指標 1 指向指標的指標的定義 p p 變數的位址上的數值的位址 2 指標型別要和你指向的資料或者指標型別要一致 3 指標與一維陣列的取值 a i a i a i p i p i a i a i a代表的是陣列的變數名,i是代表陣列a裡面的第i個元素 是指求括號 a i 的位址 voi...