拾遺 C 申請動態連續記憶體的二維陣列

2021-09-25 19:52:00 字數 1304 閱讀 9156

前幾天去科大訊飛面試,其他問題回答的都還不錯,但是被問到這個「如何動態申請乙個連續記憶體空間的二維陣列」時,稍微頓了一下。倒不是回答不上來,而是之前從沒有嘗試敲過這樣的**,光說思路實在是太乾癟。

回來以後,嘗試了幾段**,又和不少人討論了一下,把**擼了出來。

先說思路:對於要求的x*y的二維陣列,可以先申請一段連續的x*y記憶體空間,然後通過指向指標的指標的重新定位每行開頭的位置。

剛開始和本人討論的時候,不少人給了這樣的**:

int **p2 =

newint *[x];

for (

int i =

0; i < x; i++)

p2[i] =

newint[y];

但是,這段**只是用來動態申請二維陣列的,迴圈x次來申請長度為y的記憶體空間時,只能保證每一行的空間是連續的,並不能保證第n行的最後乙個元素和第n+1行第乙個元素的位址是連續的。

後來嘗試了一下,給出了正確的**:

int **p1 =

newint *[x];

*p1 =

newint[x*y];

for (

int i =

0; i < y; i++)

p1[i] = *p1 + i*y;

一次性申請了x*y的空間,然後通過迴圈,重新定位每行第乙個元素的所指向的位址。保證了二維陣列從頭到尾的連續性。

兩段**整合比對;

#include

#include

using

namespace

std;

intmain

(int argc,char *ar**)

cout

<<

"動態離散二維陣列"

<<

endl;

int **p2 =

newint *[x];

for (

int i =

0; i < x; i++)

p2[i] =

newint[y];

for (

int i =

0; i < x; i++)

system(

"pause");

return

0;

}

專門將兩種申請二維陣列方式的最後二維陣列的位址給輸出出來

很明顯,第二種方式確實不是連續空間的二維陣列。

C 二維陣列動態申請記憶體

好久沒用c 刷題了,今天早上刷了幾條題,感覺很陌生了。怪我,大二下實在太頹廢了,沒啥作為。今天更新個關於c 二維陣列記憶體申請的問題,當初作為菜鳥初學指標的時候,還是在這方面有點搞不通的。今天用到了,順便寫下來,適當時候給c 初學者用用。c 二維陣列動態申請記憶體 如果對new和delete不是很了...

C 動態申請二維陣列

剛學習,做下總結。以下是我的理解,如有錯誤歡迎指出。申請 int a 乙個指向指標的指標。int n m cin n m a new int n 申請乙個n個元素的一維陣列 作為行 for int i 0 i 關係如下假設 n 3 m 4 先申請乙個一維陣列,陣列的每個元素都是乙個指標變數 該陣列的...

C 基礎 二維陣列動態的申請記憶體和釋放記憶體

使用二維陣列的時候,有時候事先並不知道陣列的大小,因此就需要動態的申請記憶體。常見的申請記憶體的方法有兩種 malloc free 和 new delete。一 malloc free 1 申請一維陣列 void dynamiccreate1array 2 申請二維陣列 void dynamiccr...