下面三種定義形式怎麼理解?怎麼動態分配空間?
(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.讓陣列的內容連續,但在後來重新分配列的時候會比較困...