一、
double (*Getdata())[n]
{
double(*p1)[n]=new double[3][n];
string data1 = "E:\\code3\\testpst\\xxv.txt";
string data2 = "E:\\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;
}
}