前幾天去科大訊飛面試,其他問題回答的都還不錯,但是被問到這個「如何動態申請乙個連續記憶體空間的二維陣列」時,稍微頓了一下。倒不是回答不上來,而是之前從沒有嘗試敲過這樣的**,光說思路實在是太乾癟。
回來以後,嘗試了幾段**,又和不少人討論了一下,把**擼了出來。
先說思路:對於要求的x*y的二維陣列,可以先申請一段連續的x*y記憶體空間,然後通過指向指標的指標的重新定位每行開頭的位置。
剛開始和本人討論的時候,不少人給了這樣的**:
但是,這段**只是用來動態申請二維陣列的,迴圈x次來申請長度為y的記憶體空間時,只能保證每一行的空間是連續的,並不能保證第n行的最後乙個元素和第n+1行第乙個元素的位址是連續的。
int **p2 =
newint *[x];
for (
int i =
0; i < x; i++)
p2[i] =
newint[y];
後來嘗試了一下,給出了正確的**:
一次性申請了x*y的空間,然後通過迴圈,重新定位每行第乙個元素的所指向的位址。保證了二維陣列從頭到尾的連續性。
int **p1 =
newint *[x];
*p1 =
newint[x*y];
for (
int i =
0; i < y; i++)
p1[i] = *p1 + i*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...