c++動態數組的使用


  在c++中,有的時候會遇到變長的數組(不管是一維的還是二維的),這個時候就需要用到動態數組了,並且要用new和delete兩個操作符,這倆操作符一般成對使用。

  先說一維的動態數組吧,直接上代碼

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5    int n;   //輸入數組長度
 6    cin>>n;
 7    int *p;  //聲明一個指針
 8    p=new int[n]; /*創建了一個長度為n的動態數組,並且返回這個數組的首地址給p,p就指向了這個動態數組,可以通過指針p
 9                  來操作數組,因為創建的動態數組並沒有名字,只返回了首地址給p,所以可以把p看作是這個動態數組的名字 */
10    for(int i=0;i<n;i++)
11        cin>>p[i];
12    for(int i=0;i<n;i++)
13        cout<<p[i]<<" ";
14    delete []p;  //釋放這個一維的動態數組,而不是釋放指針p。用完以后要記得釋放掉
15    cout<<p;    //輸出指針p的地址
16    return 0;
17 }

用完了以后,在14行釋放掉了這個動態數組,而不是釋放的指針p(以便接下來還能使用),接着又輸出了指針p的地址。如果你釋放掉了指針p,delete p; 那么接下來就

不能再使用用指針p了,因為p所占的內存空間已經釋放了,再用的話就會出錯。比如在第14行后加上 delete p;然后再執行下一條語句 cout<<p; 來輸出p的地址就會報錯

報錯如下:

說了這么多有點跑題了,只是想說明一下不要釋放錯。

 

再說一下二維的動態數組,上代碼

#include<iostream>
using namespace std;
int main()
{
   int m,n;   //輸入數組大小
   int *column;
   int **p;   //聲明一個二級指針
   cin>>m;
   column=new int[m];  //column用來記錄每行元素的個數,因為每行元素的個數可能不同,如果都相同的話就不需要了
   p=new int*[m]; //創建了一個有m行的的二維動態數組;可以看成數組p[m]中每個元素都是指針,用來指向一個數組
   for(int i=0;i<m;i++)
   {
       cin>>n; 
       column[i]=n;
       p[i]=new int[n];  //確定每行元素的個數,p[i](一級指針)為每行元素的首地址

   }
   for(int i=0;i<m;i++) //輸入每行元素的值
   {
       for(int j=0;j<column[i];j++)
         cin>>p[i][j];
   }
   cout<<"---------輸出每行元素-----------\n";
   for(int i=0;i<m;i++)  //輸出每行元素
   {
       for(int j=0;j<column[i];j++)
         cout<<p[i][j]<<" ";
       cout<<endl;
   }

   for(int i=0;i<m;i++)  //用完釋放掉每行(釋放二級指針)
       delete []p[i];
   delete []p;  //釋放掉每行后,再釋放這個二維數組(釋放一級指針)
   cout<<"指針p的地址:"<<p;    //輸出指針p的地址
   return 0;
}

注釋我寫的比較詳細,運行結果如下圖

     

可以看到每行的長度都可以不同,這個就根據個人需要了。


免責聲明!

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



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