C++在數組元素個數未知情況下聲明數組


  我們都從書上學習的方法,定義一個數組需要數組名、類型以及數組元素個數,一般定義必須明確元素的個數,否則無法通過編譯。

  1、

int a[];

 

  2、

int n;
int a[n];

  就想上面這兩種情況,肯定無法通過編譯的。

  當然有一種情況不用定義元素個數,就是在聲明的時候就將數組進行初始化賦值。

int a[] = {1,2,3,4}

  這種情況是可以的。

  那當我不想進行初始化賦值,又不能確定元素個數時,我們該如何聲明這個數組呢?

  我相信很多人遇到過這個問題,我也一樣。今天我終於找到這個問題的解決方案——利用動態聲明的方式聲明一個數組。

  首先,我們來看看一維數組的定義,代碼如下:

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

  當然,動態聲明一位數組,實質是根據n的值向內存申請了n*sizeof(int)大小的空間,在數組使用完之后,需要釋放這個空間:

delete []a;

  那么二維數組如何通過動態聲明進行聲明呢?代碼如下:

int **a = new int*[m];  //首先聲明一組指向各行指針
for(int i = 0;i<m;i++)
    a[i] = new int[n]    //再聲明各行的每列元素的指針

  同樣,使用完數組還需釋放內存空間:

for(int i = 0; i<m;i++)
    delete []a[i];
delete []a;

  最后要注意的一點是,動態聲明的二維數組中,a[k]是一個int*類型,是一個指針,因此只能使用a[i][j]或*(*(a+i)+j)訪問相應的元素,絕對不能使用a[i*n+j]的方式訪問。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM