免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jjj346
打印 上一主题 下一主题

求返回一个数组的方法 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-10-20 14:59 |只看该作者
数组其实不是数组。

论坛徽章:
0
12 [报告]
发表于 2006-10-20 20:46 |只看该作者
原帖由 longshort 于 2006-10-20 08:06 发表
可以在函数里定义一个静态数组,例如:


  1. char *xxx()
  2. {
  3. ...
  4. static char s1[1024];
  5. ...
  6. return(s1);
  7. }
复制代码



如果需要多次调用这个函数有没有什么问题???

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2006-10-20 20:57 |只看该作者
原帖由 emacsnw 于 2006-10-20 12:16 发表
一般来说数组不用返回值,而是直接作为函数的参数,在函数里面直接修改它。比如

void get_sorted(int array[], int len);


我习惯用这个方式.

论坛徽章:
0
14 [报告]
发表于 2006-10-20 21:07 |只看该作者
恩,这种方式我知道,但是我的目的是在函数过程中需要一个额外的数组,并且函数返回后需要这个数组的信息,并且这个函数需要多次调用,刚才试了一下,static可以满足要求
是不是因为函数中的static变量是在函数退出后并不立即取回其地址,而只在程序结束后才回收

论坛徽章:
0
15 [报告]
发表于 2006-10-20 21:26 |只看该作者
原帖由 jjj346 于 2006-10-20 21:07 发表
恩,这种方式我知道,但是我的目的是在函数过程中需要一个额外的数组,并且函数返回后需要这个数组的信息,并且这个函数需要多次调用,刚才试了一下,static可以满足要求
是不是因为函数中的static变量是在函数退 ...


静态变量的生存期是程序的运行期

论坛徽章:
0
16 [报告]
发表于 2006-10-21 06:46 |只看该作者
原帖由 jjj346 于 2006-10-19 20:42 发表
首先想知道一下返回一个数组有没有意义,如果答案是肯定的话,我想知道怎么返回,
我刚开始时的方法是创建一个临时数组,使用完后再返回,但是这样返回的是一个临时变量,不安全,所以想知道有没有好的方法,
如 ...

你的意思是在某函数里创建一个动态数组,并将其作为该函数的返回值?
C函数没法返回数组本身,只能返回指向数组的指针。
不过,在这里,即使返回指向数组的指针也没用。
因为,在堆空间里分配的动态实体,当离开其作用域时,即成为内存垃圾,造成内存泄漏。

论坛徽章:
0
17 [报告]
发表于 2006-10-21 07:59 |只看该作者
如果需要多次调用这个函数有没有什么问题???

没有问题。

在函数中定义的静态数组作为一个无名数据空间,生存于整个程序寿命期。它的作用主要就是为了那些不需要在全局范围都知道、而又必须在下一次调用时读出上一次作用的结果的场合。这一数据空间的索引总是通过指针来获得。

一般情况下,静态数组定义得别太大,满足需要即可。

论坛徽章:
0
18 [报告]
发表于 2006-10-21 10:05 |只看该作者
听说静态局部变量在多线程环境下会出问题的

论坛徽章:
0
19 [报告]
发表于 2006-10-21 11:19 |只看该作者
原帖由 longshort 于 2006-10-21 07:59 发表

没有问题。

在函数中定义的静态数组作为一个无名数据空间,生存于整个程序寿命期。它的作用主要就是为了那些不需要在全局范围都知道、而又必须在下一次调用时读出上一次作用的结果的场合。这一数据空间的索引 ...



Thank you



原帖由 I/0 于 2006-10-21 10:05 发表
听说静态局部变量在多线程环境下会出问题的


能说一下吗,不过static确实能满足我的要求~~

论坛徽章:
0
20 [报告]
发表于 2006-10-21 23:27 |只看该作者
就是线程同步的问题,和线程间共享全局变量一样。
一直都是听说多线程的程序不好写,不过我在这方面的经验少,所以感受不是很深。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP