如题:
例如:有一个函数叫“foo()”
int* foo()
{
int* a[10];
... ... ...
return ????;
}
又该怎么在主函数main中用这个函数呢?
int main(int argc, char* [])
{
... ... ...
int* tempA[10];
tempA = foo(); // ????????
... ... ...
}
“问号的地方”是不懂的,希望各位能说的尽量简明一些
非常感谢!
函数声明那里漏写啦一个*,应该是int ** foo()
非常感谢你的回答,但可能是因为我的问题foo函数定义那漏写啦一个*,所以你理解错了,我遇到的问题是关于返回“指针数组”该怎么处理,返回“一般数组”对我来说应该没什么问题,更具体的问题,写在一楼(最先回答的那个人)的追问中了,但还是非常感谢你。
追答如果是这样的结构
a-------->a1-------->i1
|-------->a2-------->i2
|……………………
|-------->an-------->im
这样的调用方法,只能保证a1-an不被修改,怎么保证i1-im不被修改?
对于你追问第一个人的内容,大概是因为,函数执行结束之后,只释放地址,而不清除地址中的数据吧。所以a1-an都被释放了。如果是普通数组,地址中的数据还在,用同样的指针就可以取到。
非常感谢,但还有个地方不太明白哈:我那么写,不行的原因应该是:在foo函数结束后foo函数的那部分空间中创建的东东就都会被销毁啦,所以main中找不到foo中创建的东东,但我试了一下,如果让函数不返回“指针数组”而是返回“一般数组”,例如“存储int类型数据的数组”,这样的话,程序运行的就没有问题,但刚才的原理来说的话,这样的话应该不行啊,但为什么不会出现之前的问题呢?
追答如果你只是读数组的数据可能不报错,但是你尝试更改这个数组的内容就应该会出错了,因为这时你试图去改写一块使用权不属于你的内存。
就算这个不出错,那也只说明你所用的编译器比较“仁慈”。
总之,这是不可取的做法