較早的編譯器是不同意這樣做的,所以一些書籍比方以tc解說的書本都說陣列的下標不能是變數。在vc6.0下亦是如此。
只是在一些較新的編譯器如dev c++已經支援了,例如以下**不會報錯
#include #include int main()
可是new出來的一定不要忘了delete掉
delete a; // 正確的使用方法
delete a; // 錯誤的使用方法
後者相當於delete a[0],漏掉了另外n-1個物件。
二維:
//設有m行n列
cin>>m>>n;
int **a = new int* [m];
for(int i = 0; i < m; i++)
這樣就相當於產生了乙個二維陣列a[m][n]了,可是對於我們平時宣告的陣列a[m][n],a[i][j]=a[i*n+j],由於是連續的一片記憶體,而這樣動態宣告的陣列隨意的a[k]都是乙個int*型別,即乙個位址了,
所以僅僅能a[i][j]或者*(*(a+i)+j)來訪問陣列的元素,而不能a[i*n+j]這樣轉換著用。
1 //釋放記憶體:
2 for(int i = 0; i < m; ++i)
3 4
8 delete a;
還有就是使用stl容器
之所以動態宣告陣列,相比是大小不確定,宣告太大了怕浪費空間,而vector就不用指定大小,當存的資料變多,自己主動擴大容量,比方如果vector預設大小是8,當你再往裡存第9個元素時,容器自己主動擴容,變為16,16再不夠用,擴為32,2倍2倍的增長,這樣就依據須要擴容,不會浪費空間,也能夠像普通陣列那樣直接指定vector的大小,總之普通陣列能夠的它都能夠,普通陣列沒有的它更有。
第一種方法
1 #include 2 #include 3 #include 4 #include 5 using namespace std;
6 7
8 int main()
9 16
17 for(int i=0; i< obj.size(); i++)//輸出二維動態陣列
18 {
19 for(int j=0;j第二種方法
1 #include 2 #include 3 #include 4 #include 5 using namespace std;
6 7
8 int main()
9 {10 int n=5, m=6;
11 vector> obj(n, vector(m)); //定義二維動態陣列5行6列
12
13 for(int i=0; i< obj.size(); i++)//輸出二維動態陣列
14 {
15 for(int j=0;j以上就是動態陣列的定義方法啦。
C 用變數定義陣列
較早的編譯器是不同意這樣做的,所以一些書籍比方以tc解說的書本都說陣列的下標不能是變數。在vc6.0下亦是如此。只是在一些較新的編譯器如dev c 已經支援了,例如以下 不會報錯 include include int main 可是new出來的一定不要忘了delete掉 delete a 正確的使...
asp動態定義陣列(用變數作為陣列
在陣列是不能直接用變數來定義下標的,如 n 5dim a n 這樣就會報錯 為了達到不固定的下標值,可以用的execute n 5execute dim a n response.write ubound a 輸出結果為5 還有另一種方法就是用redim redim是可以使用變數的 dim danx...
C陣列指標變數的定義
define crt secure no warnings include include include void demo for i 0 i 5 i puts printf myarray代表陣列首元素的位址 myarray p myarray 1 p n myarray,myarray 1 ...