二維陣列定義及動態分配空間

2021-06-15 06:02:14 字數 1170 閱讀 5318

下面三種定義形式怎麼理解?怎麼動態分配空間?

(1)、int **ptr;

(2)、int *ptr[ 5 ]; 我更喜歡寫成 int* prt[5];

(3)、int ( *ptr )[ 5 ];

此文引自網上,出處不詳,但是覺得非常好。略改了一點。

例子:c語言:

//動態分配二維陣列空間

//由此分配的二維陣列空間並非是連續的

//可以使用m_pptable[row][col]來給該二維陣列賦值

//其中 0<=row

//釋放所分配的記憶體空間

int **a;

a=(int **)calloc(sizeof(int *),n);

for (i=0;i   a[i]=(int *)calloc(sizeof(int),n);

這樣就可以了

使用的時候就和普通的二維陣列一樣

最後用for(i=0;i   cfree(a[i]);

cfree(a);釋放記憶體

就可以了

(2)、int *ptr[ 5 ]

這樣定義的話,編譯器已經為它分配了 5 個指標的空間,這相當

於(1)中的第一次記憶體分配。根據對(1)的討論可知,顯然要對其進行一次

記憶體分配的。否則就是"野"指標。

(3)、int ( *ptr )[ 5 ]

這種定義我覺得很費解,不是不懂,而是覺得理解起來特別吃力,

也許是我不太習慣這樣的定義吧。怎麼描述它呢?它的意義是"一群"

指標,每個指標都是指向乙個 5 個整數的陣列。如果想分配 k 個指標,

這樣寫: ptr = ( int ( * )[ 5 ] ) new int[ 5 * k ]。

這是一次性的記憶體分配。分配好以後,ptr 指向一片連續的位址空間,

其中 ptr[ 0 ] 指向第 0 個 5 個整數陣列的首位址,ptr[ 1 ] 指向第

1 個 5 個整數陣列的首位址。

綜上所述,我覺得可以這樣理解它們:

int ** ptr <==> int ptr[ x ][ y ];

int *ptr[ 5 ] <==> int ptr[ 5 ][ x ];

int ( *ptr )[ 5 ] <==> int ptr[ x ][ 5 ];

這裡 x 和 y 是表示若干的意思。

**

二維陣列定義及動態分配

copy別人的哦。只是留著用於自己學習 下面三種定義形式怎麼理解?怎麼動態分配空間?1 int ptr 2 int ptr 5 我更喜歡寫成 int prt 5 3 int ptr 5 此文引自網上,出處不詳,但是覺得非常好。略改了一點。例子 c語言 動態分配二維陣列空間 由此分配的二維陣列空間並非...

動態分配二維陣列

1.c語言動態分配二維陣列 1 已知第二維 code 1 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 2 已知第一維 code ...

動態分配二維陣列

原文摘自 假設我需要乙個nrows ncolumns陣列,則可以用以下幾種方法動態分配空間 1.動態陣列的成員都可以用正常的陣列下標 array i j include include void main printf n free array 2.讓陣列的內容連續,但在後來重新分配列的時候會比較困...