方法一
函数运行结束会释放栈空间,但是堆空间并不在他的管辖范围内,于是可以在函数内部使用malloc申请内存,最后返回这块堆内存的地址,即使函数运行结束把指针p释放掉,但是它指向的内存还在,主函数中因为接收到了test函数的返回值,所以指针s也是个合法的指针,指向test函数申请的堆内存,最后用完了记得释放就行
#include <stdlib.h>
#include <stdio.h>
int* test()
{
int* p = (int*)malloc(sizeof(int) * 5);
*p = 1;
*(p + 1) = 2;
*(p + 2) = 3;
*(p + 3) = 4;
*(p + 4) = 5;
return p;
}
int main()
{
int* s = test();
for (int i = 0; i < 5; i++)
{
printf(" %d \n", *(s + i));
}
free(s);
return 0;
}
方法二
既然想返回多个数据,可以把这些数据整合在一个结构体中,返回结构体变量,也算是只有一个返回值,只不过这个变量里面又可以拆分成多个变量,所以也能满足要求
#include <stdio.h>
struct Test
{
int a=1;
int b=2;
char c='a';
};
struct Test test()
{
struct Test t;
return t;
};
int main()
{
struct Test tt = test();
printf(" %d %d %c\n", tt.a, tt.b, tt.c);
return 0;
}
此外的方法:
用static关键字申明局部的指针变量,然后就可以返回这个指针或者把目的地址传入函数,用memcpy函数把局部变量的的值复制到目的地址