好的,问题解决了。楼上的两位对于这个问题的解决一针见血。非常感谢。
我最想要的结果是 27楼yeshirow的解决方式。返回一个“指向二维数组的指针”,这个结果比较直接。
28楼随心的解决方式有个运算:“(f()+1)”,不是兄弟我不动脑筋,我之前确实没有见过这种运算。我一直认为f()返回的是一个地址,因此对一个地址加减,之后一定是要取值的,因此我在编译器里试的代码是:“*(f()+1)[2]”,结果当然没通过,所以我错误的认为操作第二行的元素是不可能的。还请随心耐心给讲解一下这个运算的意义?
我觉得这个问题还是可以深入探讨一下的。既然f()返回的是一个指针(这时候可以认为它返回的是一个一维指针数组),那么给f()进行取地址的操作之后,f()就可以指向二维指针了。
例如:
#include <iostream>
using namespace std;
int* f()
{
int arr[2][3] = {{1,2,3}, {7,8,9}};
return arr[0];
}
int main()
{
int **p;
p=&(f());//取f的返回值地址,这是不可以的。编译器报错。
cout << **p<< endl;
system("pause");
return 0;
}
现在再对二维指针进行操作,就类似于达到了函数返回二维指针的效果了。上述代码是不可以通过编译的。
但是如果这样:
#include <iostream>
using namespace std;
int* f()
{
int arr[2][3] = {{1,2,3}, {7,8,9}},**p;
p=&(arr[0]);//编译器报错,同样是指向二维指针啊。
return arr[0];
}
int main()
{
int **p;
p=&(f());//这里是有错的。
cout << **p<< endl;
system("pause");
return 0;
}
编译是无法通过的,这是为什么呢?
[[italic] 本帖最后由 VanHorn 于 2008-1-10 17:12 编辑 [/italic]]