C 入門 動態建立一維 二維陣列

2021-08-21 05:46:50 字數 2127 閱讀 6443

vs2010中輸入:

#include using namespace std;

//根據變數動態建立一維陣列

int main()

{ int n=5;

int *p=new int[n];

/*初始化方法一*/

//memset(p,0,sizeof(int)*n);

/*初始化方法二*/

for(int i=0;i輸出5個0

但是如果想用p[6]怎麼辦?

c語言可以用realloc,c++可以用vector,或者自己重新new乙個所需大小的陣列,然後把之前的複製過來。

這個部落格寫的挺好:

#include using namespace std;

//根據變數動態建立一維陣列

int main()

{ int n=10;

int **p=new int* [n];

for(int i=0;i**比較多,知識點也比較多

首先是二維陣列的指標型別:

p代表的是指向p[n]

要注意 p 和 &p 的型別是不同的。p 相當於 &p[0],

而 &p 是乙個指向 int[n] 的指標,型別是 int(*)[n]

也可以看看部落格:

然後是初始化:

不能直接用:

memset(p,0,sizeof(int)*n*n);
因為位址不對,比如我將每個元素&p的位址輸出出來

&p[0][0]: 

033638d8 033638dc 033638e0 033638e4 033638e8

03363708 0336370c 03363710 03363714 03363718

03363748 0336374c 03363750 03363754 03363758

03363788 0336378c 03363790 03363794 03363798

033637c8 033637cc 033637d0 033637d4 033637d8

&p[4][4]: 

明顯可以看出p[0][0]和p[1][0]位址差距為5*16=80個位元組,但是咱們陣列應該是5*4=20個位元組

本來以為是指標的原因。把指標位址輸出出來

&p[i]: 032d48d8

&p[i][j]: 032d4928 &p[i][j]: 032d492c &p[i][j]: 032d4930 &p[i][j]: 032d4934 &p[i][j]: 032d4938

&p[i]: 032d48dc

&p[i][j]: 032d4978 &p[i][j]: 032d497c &p[i][j]: 032d4980 &p[i][j]: 032d4984 &p[i][j]: 032d4988

&p[i]: 032d48e0

&p[i][j]: 032d49c8 &p[i][j]: 032d49cc &p[i][j]: 032d49d0 &p[i][j]: 032d49d4 &p[i][j]: 032d49d8

&p[i]: 032d48e4

&p[i][j]: 032d4a18 &p[i][j]: 032d4a1c &p[i][j]: 032d4a20 &p[i][j]: 032d4a24 &p[i][j]: 032d4a28

&p[i]: 032d48e8

&p[i][j]: 032d4a68 &p[i][j]: 032d4a6c &p[i][j]: 032d4a70 &p[i][j]: 032d4a74 &p[i][j]: 032d4a78

發現指標的位址都小於資料位址,可以說先給指標位址,再給資料位址(堆從低位址向高位址擴充套件)

好了,到現在我已經不動了。

我把n調成10,發現本來應該是4個位元組的差距,結果是104.

這個肯定是浪費了太多的空間,所以說以後刷筆試題目,還不如直接用1000的固定陣列來做。。。

說多了,回過來再說初始化:

兩種方式,必須用for迴圈。。。

更推薦:

for(int i=0;i在說下

釋放空間

:for(int i=0; i程式設計師的知識點相當多,每次想寫乙個知識點,發現擴充套件下去無窮無盡,可能這就是程式設計的魅力吧。

打好基礎,好好學習

C 動態建立二維陣列

方法1 用一維陣列代替二維陣列 int n,m cin n m int a new int n m for int i 0 icoutcout執行結果 0 00491bb0 1 00491bb4 2 00491bb8 1 00491bbc 2 00491bc0 3 00491bc4 2 00491b...

c 動態建立二維陣列

為了做乙個東西需要用到動態建立二維陣列,特此記錄.include include time.h using namespace std int main srand unsigned time null int x num int y num cout please input x num cin ...

動態建立二維陣列

c 中用new動態建立二維陣列的格式一般是這樣 type p n new type n 其中,type是某種型別,n是二維陣列的列數。採用這種格式,列數必須指出,而行數無需指定。在這裡,p的型別是type n 即是指向乙個有n列元素陣列的指標。還有一種方法,可以不指定陣列的列數 int p p ne...