c++二維陣列指標
阿新 • • 發佈:2019-01-09
1.定義指標指向二維陣列
為了方便根據使用者輸入動態定義二維陣列的行和列,引入變數rowsNum(行),colsNum(列)。
以定義5行4列的二維陣列為例,
int rowsNum = 4;
int colsNum = 5;
float** a = new float*[rowsNum];
for(int i = 0; i < rowsNum; i++)
{
a[i] = new float[colsNum];
}
示意圖如下:
2.二級指標記憶體的釋放
二級指標記憶體的釋放與記憶體的申請類似,具體程式碼如下:
for(int i = 0; i < rowsNum; i++) { delete[] a[i]; } delete []a;
注意:程式在執行完相關功能後應該釋放申請過的記憶體。雖然程式結束時作業系統會自動清除,但對於需要長時間執行的程式來說,如果不及時釋放記憶體的話,程式的執行效率會越來越低,嚴重甚至佔用完大部分系統記憶體,影響其他程式的執行。
3.舉例
例子中展示了指標指向一維陣列,指標指向二維陣列的用法。
#include <iostream> using namespace std; void Test(float** a, float* b, const float* c){ b[0] = c[0] - 1; b[1] = c[1] - 1; a[0][0] = b[0] + c[0]; a[0][1] = b[0] - c[0]; a[0][2] = b[0] * c[0]; a[0][3] = b[0] / c[0]; a[1][0] = b[1] + c[1]; a[1][1] = b[1] - c[1]; a[1][2] = b[1] * c[1]; a[1][3] = b[1] / c[1]; } int main(){ int rowsNum = 2; int colsNum = 4; float** a = new float*[rowsNum]; for(int i = 0; i < rowsNum; i++) { a[i] = new float[colsNum]; } float* b = new float[2]; float cbase[2] = {1.5, 1.2}; float* c = cbase; Test(a, b, c); cout << "a:" << endl; for(int i = 0; i < rowsNum; i++) { for(int j = 0; j < colsNum; j++) { cout << a[i][j]<< " "; } cout << endl; } cout << "b:" << endl; for(int j = 0; j < 2; j++) { cout << b[j]<< " "; } cout << endl; cout << "c:" << endl; for(int j = 0; j < 2; j++) { cout << c[j]<< " "; } for(int i = 0; i < rowsNum; i++) { delete[] a[i]; } delete []a; delete []b; return 0; }