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