嵌入式技术
C语言的函数如何返回多个数据?这个操作在写代码的时候还经常遇到。
先来看个典型的错误,有80%的初学者都会这样写。
既然要返回多个数据,那么可以把多个数据放在一个数组中,然后直接返回数组名,因为数组名是地址,所以这样的函数我们把它称作指针函数。
int *test() { int arr[5] = {1, 2, 3, 4, 5}; return arr; }这种写法应该说错的还比较明显,大部分编译器在编译的时候,就会直接提示警告,说返回了局部变量的地址。
root@Turbo:test# gcc test.c -o test test.c: In function ‘test’: test.c9: warning: function returns address of local variable [-Wreturn-loca l-addr] 6 | return arr; | ^~~ root@Turbo:test#原因很简单,因为数组是局部变量,属于栈空间内存,函数运行结束后,会自动释放栈空间的内存,也就是数组这块内存没了,即使调用的函数记住了这个地址,此时也变成了野指针,直接去访问就可能会有未知的错误发生。
int *test() { int *p = (int *)malloc(sizeof(int) * 5); return p; } int main() { int *s = test(); free(s); return 0; }即使函数运行结束,把指针p释放了,但是它指向的内存还在。主函数中,因为接到了test函数的返回值,所以指针s也是个合法的指针,指向test函数中申请的堆内存。
struct Test { int a; int b; char c; }; struct Test test() { struct Test tt; return tt; }最后,关于返回多个数据,大家还有没有其他办法,如果你知道,欢迎私信留言。
全部0条评论
快来发表一下你的评论吧 !