打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【原】C语言函数返回数组的问题

有些时候需要子函数将一个数组返回出来,通常是两种方法,一种是靠指针,另一种是结构体。

返回非数组可以这样使用:

比如,输入a,返回b和c:
void fun(int a, int *pb, int *pc)
{
*pb = a - 1;
*pc = a + 1;
}

int main()
{
int a = 1;
int b, c;
fun(a, &b, &c);//输入a返回b=a-1,c=a+1两个结果
printf("a=%d,b=%d,c=%d",a,b,c);//输出结果是“a=1,b=0,c=2”
return 0;
}

一、先来看依靠指针怎么做

例程1:

 1 #include "stdio.h" 2  3 char *test(char *tmp) 4 { 5     return tmp; 6 } 7  8 void main(void) 9 {10     printf("%s",test("第一个测试例子\n"));11 }

 

例程1中的test函数如果写成下面的形式,就无法顺利编译。

例程2:

 1 #include "stdio.h" 2  3 char *test() 4 { 5     //char tmp[30]="第一个测试例子\n";//写成这样编译时弹出警告,最后的结果也是乱码 6     char *tmp="第一个测试例子";//写成这样可以用指针返回数组首地址 7     return tmp; 8 } 9 10 void main(void)11 {12     printf("%s",test());13 }

之所以*tmp可以而tmp[30]不可以,是因为tmp[30]是个局部变量,子函数结束时该数组地址虽然没变,但是里面的值已经无意义了,而*tmp是定义了一个全局变量。

但是有些时候我们必须用到类似tmp[30]而不是*tmp,这时就要用到static这个关键字:

例程3:

 1 #include "stdio.h" 2  3 char *test() 4 { 5     static char tmp[30]="第三个测试例子"; 6     return tmp; 7 } 8  9 void main(void)10 {11     printf("%s",test());12 }

 在数组tmp[30]前面加入了static关键字,它就使得tmp[30]存放在内存中的静态存储区中,所占用的存储单元一直不释放直到整个程序运行结束.所以当主函数调用完print()函数后,该空间依然存在.所以main()函数中接到首地值后可以访问数组中的元素.

二、使用结构体作为返回值来传递数组:

 1 #include "stdio.h" 2 #include "string.h" 3  4 struct ret 5 { 6     char buf[30]; 7 };//定义结构体时不要忘了分号 8  9 struct ret test(char *tmp)10 {11     struct ret a;12     strcpy(a.buf,tmp);13     return a;14 }15 16 17 void main(void)18 {19     struct ret b;20     b=test("用结构体作为返回值传递数组");21     printf("%s",b.buf);22 }

两点注意:

1、数组之间的赋值不要直接,即不要直接将数组A赋给数组B,而是要用strcpy(字符型数组)或者memcpy(非字符型数组)。

2、用结构体定义变量和函数时不要忘了结构体名(上面程序的ret)。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
「小白到大牛之路9」交换机后台管理系统之函数优化
实验四
嵌入式编程中的高低位交换如何实现?
c语言笔试题总结1
《C语言程序设计》12 函数参数写字字帖
C|图解指针变量
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服