我的myFunc返回值为a数组的首地址,我想用r来接收函数返回值,然后在外界可以用利用r[×]的方式调取到。有没有方法能实现?
指针和数组是等同的,数组可以视为一个指针的常量。你上面的写法是错的,但可以编译通过。因为a是自动变量,其数组的内存空间分配在堆栈中,方法退出之后自动变量的所有内存都会被释放,a也会被释放。这样的代码会破坏内存。
c的写法应该是
int * myFunc(){
return malloc(3*sizeof(int));
}
c++可以这样写:
return new int[3]{1,2,3};
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
数组名实际上就是指针,因此返回数组就是返回一个指针。但有一点要特别注意的是:不要返回指向局部变量的指针或引用
局部变量的生命周期仅限于定义它的函数作用域内,离开函数局部变量就无效了,此时再通过指针访问该变量将导致不可预知的结果。你的
myFunc()
函数返回的就是一个指向局部数组a的指针,因此这个程序执行的结果是未知的,可能正常输出a中的元素,可能输出垃圾值,或者程序可能因访问了非法地址而崩溃。通常解决这个问题的方式有两种:
1.将a声明为静态的
静态局部变量保存在全局区中,它的生命周期和进程一致,并不会因函数
myFunc()
结束而消亡。2.使用
malloc()
动态分配内存malloc()
函数分配的内存位于堆上而不是函数栈中,其中的数据同样不受函数生命周期的影响。但要注意使用
malloc()
分配的内存并不会被系统自动回收,需要对应使用free()
来回收内存,否则将导致内存泄露。