1. 程式人生 > >c++二維陣列指標

c++二維陣列指標

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;
	
}