指標陣列 陣列指標 二維陣列動態分配記憶體

2021-08-02 10:57:47 字數 3085 閱讀 1637

2016-03-22 22:59

838人閱讀收藏 

舉報

c(7)

c++(12)

目錄(?)

[+]

char (*a)[n];//指向陣列的指標

a = (char (*)[n])malloc(sizeof(char *) * m);

printf("%d\n", sizeof(a));//4,指標

printf("%d\n", sizeof(a[0]));//n,一維陣列

free(a);

char* a[m];//指標的陣列

int i;

for(i=0; ichar *)malloc(sizeof(char) * n);

printf("%d\n", sizeof(a));//4*m,指標陣列

printf("%d\n", sizeof(a[0]));//4,指標

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

char* a[m];//指標的陣列

int i;

a[0] = (char *)malloc(sizeof(char) * m * n);

for(i=1; i1] + n;

printf("%d\n", sizeof(a));//4*m,指標陣列

printf("%d\n", sizeof(a[0]));//4,指標

free(a[0]);

char **a;

int i;

a = (char **)malloc(sizeof(char *) * m);//分配指標陣列

for(i=0; i char *)malloc(sizeof(char) * n);//分配每個指標所指向的陣列

}printf("%d\n", sizeof(a));//4,指標

printf("%d\n", sizeof(a[0]));//4,指標

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

}free(a);

char **a;

int i;

a = (char **)malloc(sizeof(char *) * m);//分配指標陣列

a[0] = (char *)malloc(sizeof(char) * m * n);//一次性分配所有空間

for(i=1; i1] + n;

}printf("%d\n", sizeof(a));//4,指標

printf("%d\n", sizeof(a[0]));//4,指標

free(a[0]);

free(a);

char (*a)[n];//指向陣列的指標

a = new

char[m][n];

printf("%d\n", sizeof(a));//4,指標

printf("%d\n", sizeof(a[0]));//n,一維陣列

delete a;

char* a[m];//指標的陣列

for(int i=0; inew

char[n];

printf("%d\n", sizeof(a));//4*m,指標陣列

printf("%d\n", sizeof(a[0]));//4,指標

for(i=0; idelete a[i];

char* a[m];//指標的陣列

a[0] = new

char[m*n];

for(int i=1; i1] + n;

printf("%d\n", sizeof(a));//4*m,指標陣列

printf("%d\n", sizeof(a[0]));//4,指標

delete a[0];

char **a;

a = new

char* [m];//分配指標陣列

for(int i=0; inew

char[n];//分配每個指標所指向的陣列

}printf("%d\n", sizeof(a));//4,指標

printf("%d\n", sizeof(a[0]));//4,指標

for(i=0; idelete a[i];

delete a;

char **a;

a = new

char* [m];

a[0] = new

char[m * n];//一次性分配所有空間

for(int i=1; i1] + n;//分配每個指標所指向的陣列

}printf("%d\n", sizeof(a));//4,指標

printf("%d\n", sizeof(a[0]));//4,指標

delete a[0];

delete a;

多說一句:new和delete要注意配對使用,即有多少個new就有多少個delete,這樣才可以避免記憶體洩漏!

如果採用上述幾種方法動態分配二維陣列,那麼將對應的資料型別作為函式引數就可以了。這裡討論靜態二維陣列作為函式引數傳遞,即按照以下的呼叫方式:

int a[2][3];

func(a);

c語言中將靜態二維陣列作為引數傳遞比較麻煩,一般需要指明第二維的長度,如果不給定第二維長度,則只能先將其作為一維指標傳遞,然後利用二維陣列的線性儲存特性,在函式體內轉化為對指定元素的訪問。 

首先寫好測試**,以驗證引數傳遞的正確性:

void func(int a[n])

void func(int* a)

注意:使用該函式時需要將二維陣列首位址強制轉換為一維指標,即func((int*)a);

指標陣列 陣列指標 二維陣列指標

指標陣列 如果乙個陣列中的所有元素儲存的都是指標,那麼我們就稱它為指標陣列。除了每個元素的資料型別不同,指標陣列和普通陣列在其他方面都是一樣的,下面是 乙個簡單的例子 include int main 也可以不指定長度,直接寫作 int parr 定義乙個指向指標陣列的指標 int parr arr...

二維陣列 指標陣列與陣列指標

一 首先我們從字面意思理解一下什麼是指標陣列什麼是陣列指標 1 指標陣列 本質是乙個陣列,陣列中的每乙個元素是乙個指標。2 陣列指標 本質是乙個指標,而指標指向乙個陣列。二 我們該怎麼區分指標陣列和陣列指標?1 總共有三種表示形式 int p 4 和int p 4 和int p 4 表面看起來是不是...

二維陣列相關(陣列指標 指標陣列)

一維陣列中,int a 5 變數名a就是陣列a首元素位址,是int 型別。a是整個陣列首位址,是指向有5個元素的陣列的指標。二維陣列中,變數名a就是0行起始位址,a 就有轉換到列的意思,就代表0行0列。陣列指標 是乙個指標,其指向的資料型別由乙個陣列構成 將陣列作為乙個陣列型別對待 如 int p ...