在C 中實現變長陣列

2021-09-28 18:08:49 字數 2578 閱讀 4768

1.變長一維陣列

這裡說的變長陣列是指在編譯時不能確定陣列長度,程式在執行時需要動態分配記憶體空間的陣列。實現變長陣列最簡單的是變長一維陣列,你可以這樣做:

//檔名: array01.cpp

#include

using namespace std;

int main()

注意int p=new int[len];這一句,你不能這樣做:

int p[len];

c++編譯器會報錯說len的大小不能確定,因為用這種形式宣告陣列,陣列的大小需要在編譯時確定。而且這樣也不行:

int p=new int[len];

編譯器會說不能把int型轉化為int型,因為用new開闢了一段記憶體空間後會返回這段記憶體的首位址,所以要把這個位址賦給乙個指標,所以要用int *p=new int[len];

array01.cpp實現了乙個變長的一維陣列,但是要養成乙個好習慣,就是注意要登出指標p,使程式釋放用new開闢的記憶體空間。

當然使用c++標準模版庫(stl)中的vector(向量)也可以實現變長陣列:

//檔名: array02.cpp

#include

#include

using namespace std;

int main()

free(b);

for(i=0;i那麼用c++怎樣實現呢?在c++中可以通過new和delete運算子動態開闢和釋放空間,其中new與c中malloc函式的功能相似,delete與c中free函式的功能相似。用c++實現變長二維陣列時可以採用兩種方法:雙指標方法和使用stl中vector(向量)的方法。

首先介紹一下雙指標方法,在這裡雙指標就是指像指標的指標,比如你可以這樣宣告乙個陣列:

int *p = new int[num1];

而對每乙個p(一共num1個p)申請一組記憶體空間:

for(int i=0; i//檔名: array04.cpp

#include

#include

using namespace std;

int main()

以下是執行結果:

please enter the number for row and column:

4 51:004915f0 2:004915f4 3:004915f8 4:004915fc 5:00491600

2:00491180 4:00491184 6:00491188 8:0049118c 10:00491190

3:00491140 6:00491144 9:00491148 12:0049114c 15:00491150

4:00491100 8:00491104 12:00491108 16:0049110c 20:00491110

press any key to continue

程式清單array04.cpp可以顯示分配的記憶體空間單元的位址,大家可以看到,由於陣列空間是動態分配的,陣列行之間的位址空間是不連續的,因為不同行的陣列元素的位址空間是用不同的new來分配的。而每一行之中列之間的位址空間是連續的。

那麼用vector(向量)怎樣實現二維陣列呢?以下給出源程式:

//檔名: array05.cpp

#include

#include

#include

using namespace std;

int main()

以下是執行結果:

input value for m,n:3 4

0: 00491180 0: 00491184 0: 00491188 0: 0049118c

0: 00491140 1: 00491144 2: 00491148 3: 0049114c

0: 00491100 2: 00491104 4: 00491108 6: 0049110c

press any key to continue

大家可以看到,這裡vector中元素的記憶體的位址分配也有同雙指標實現的二維陣列有同樣的特點。不過用vector的方法比使用雙指標簡單地多,分配記憶體空間時會更安全,陣列初始化**也更簡單,所以本人建議使用stl中的vector來實現變長多維陣列。以下是乙個變長三維陣列:)

//檔名: array06.cpp

#include

#include

#include

using namespace std;

int main()

執行結果:

input value for m,n,l:2 3 4

0: 00492fe0 1: 00492fe4 2: 00492fe8 3: 00492fec

1: 00492fa0 2: 00492fa4 3: 00492fa8 4: 00492fac

2: 00492f60 3: 00492f64 4: 00492f68 5: 00492f6c

1: 00492ec0 2: 00492ec4 3: 00492ec8 4: 00492ecc

2: 00492e80 3: 00492e84 4: 00492e88 5: 00492e8c

3: 00492e40 4: 00492e44 5: 00492e48 6: 00492e4c

在C 中實現變長陣列

1.變長一維陣列 這裡說的變長陣列是指在編譯時不能確定陣列長度,程式在執行時需要動態分配記憶體空間的陣列。實現變長陣列最簡單的是變長一維陣列,你可以這樣做 檔名 array01.cpp include using namespace std int main 注意int p new int len ...

在C 中實現變長陣列

在c 中實現變長陣列 1.變長一維陣列 這裡說的變長陣列是指在編譯時不能確定陣列長度,程式在執行時需要動態分配記憶體空間的陣列。實現變長陣列最簡單的是變長一維陣列,你可以這樣做 檔名 array01.cpp include using namespace std int main 注意int p n...

在C 中實現變長陣列

1.變長一維陣列 這裡說的變長陣列是指在編譯時不能確定陣列長度,程式在執行時需要動態分配記憶體空間的陣列。實現變長陣列最簡單的是變長一維陣列,你可以這樣做 檔名 array01.cpp include using namespace std int main 注意int p new int len ...