C++函數返回二維數組

一、

double (*Getdata())[n]
{
	double(*p1)[n]=new double[3][n];

	string data1 = "E:\\215\\0pnp\\pnp代碼\\rpnp1.0\\code3\\testpst\\xxv.txt";
	string data2 = "E:\\215\\0pnp\\pnp代碼\\rpnp1.0\\code3\\testpst\\XX.txt";
	ifstream fin1(data1);
	ifstream fin2(data2);

	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < n; j++)
		{
			fin1 >> p1[i][j];
			fin2 >> XX[i][j];
		}
	}
	return p1;
}


void Showxxv(){
	double (*p)[n];
	p = Getdata();

	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < n; j++){
			cout << setprecision(8) << p[i][j] << " ";
		}
		cout << endl << endl;	
	}
}


首先解釋一下函數的聲明:
f():說明f是一個無參的函數;

(*f()):說明我們可以對調用f的結果進行解引用;

(*f())[10]:解引用的結果是一個數組,包含十個元素;

int (*f())[10]:元素的類型爲int。

這就說明f的返回值是一個指向有十個元素的數組的指針。二維數組本質上也是一個數組,只不過它的元素也是數組而已,所以可以用返回一個指向數組的指針來表示返回一個二維數組。

int (*p)[10] = new int[10][10];

用new操作符產生二維數組的方法。此處new的返回值類型是指向數組的指針,而不是int**。

二、

double **Getdata1()
{
	string data1 = "E:\\215\\0pnp\\pnp代碼\\rpnp1.0\\code3\\testpst\\xxv.txt";
	string data2 = "E:\\215\\0pnp\\pnp代碼\\rpnp1.0\\code3\\testpst\\XX.txt";
	ifstream fin1(data1);
	ifstream fin2(data2);

	double ** p = new double*[3];

	for (int i = 0; i < 3; i++)
	{
		p[i] = new double[n];
		for (int j = 0; j < n; j++)
		{
			fin2 >> p[i][j];
		}
	}
	return p;
}

void ShowXX(){
	double **p=Getdata1();

	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < n; j++){
			cout << setprecision(8) << p[i][j] << " ";
		}
		cout << endl << endl;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章