#include <iostream>
#include <string>
#include <cstring>
#include <iomanip>
using namespace std;int main() {int m = 4, n = 5;//處理一個m行n列的二維整型數組int * *p = new int *[m];//申請嗎個元素,每個元素是int *類型的內存空間for (int i = 0; i < m; i++)p[i] = new int [n];//p數組的每個元素p[i]都是指針for (int j = 0; j < m; j++)//指向n個int 類型的內存空間首地址for (int i = 0; i < n; i++)p[j][i] = j * i;//給元素賦值for (int j = 0; j < m; j++) {for (int i = 0; i < n; i++)cout << setw(3) << left << p[j][i];//訪問元素cout << endl;}for (int i = 0; i < m; i++)delete []p[i];//釋放內存delete []p;return 0;
}
程序運行結果如圖所示
一個m行n列的整型二維數組可以看作由m個一維數組組成,每個一維數組有n個整型元素。
其基本思路是,為每一行數組申請一段內存空間( new int[n],Line10),保存申請到的這段內存空間的首地址(int *類型),一共有m行,把這m個地址存儲到一個int類型的數組中。顯然,這需要為該數組申請m個元素,每個元素都是int*類型( new int[m],Line7)。其具體實現時的順序是:先申請一段內存空間存儲m個int類型的元素用指針變量p存儲這段空間的首地址(Line7);然后依次申請m個一維數組的內存空間(用Line8的for循環實現),用數組p的元素p[i]存儲申請到的內存空間的首地址(Line10)。而釋放內存的順序與申請內存的順序恰好相反:先釋放每一行的內存(Line29),然后釋放存儲每行首地址的內存(Line31)。另外,在例2-5中使用了setw(和left,用于控制數據的輸出格式。setw(3)是指定數據的域寬為3,即每個數都占3列,不足3位的數前補空格,超過3位的數按實際數位輸出;left的作用是指定數據輸出時在域內左對齊,當輸出的數字不足3位時在數字的后面(右面)補空格。使用格式控制符需要包含頭文件< iomanip>[在這里插入圖片描述](https://img-blog.csdnimg.cn/20210122105431892.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5ODM4NjA3,size_16,color_FFFFFF,t_70)希望對大家有幫助呀!