免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3595 | 回复: 8
打印 上一主题 下一主题

[函数] 函数返回数组问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-16 16:13 |只看该作者 |倒序浏览
int a[size];
int *toArray(int number)
{
    int i;
    int temp[SIZE];
    for (i = SIZE - 1;i >= 0;i--)
    {
        temp[i] = number % 10;
        number /= 10;
    }
    return temp;
}
a = toArray(number);
编译通不过,到底要怎么办?a表示数组的首地址,那个函数返回的也是个地址啊,为什么编译器说赋值类型不匹配?
这个问题到底怎么做呢?谢谢先

论坛徽章:
0
2 [报告]
发表于 2006-07-16 16:19 |只看该作者
你的 function 返回一个 pointer 类型

论坛徽章:
0
3 [报告]
发表于 2006-07-16 16:42 |只看该作者
原帖由 fedoracore4 于 2006-7-16 16:13 发表
int a[size];
int *toArray(int number)
{
    int i;
    int temp[SIZE];
    for (i = SIZE - 1;i >= 0;i--)
    {
        temp = number % 10;
        number /= 10;
    }
    return tem ...



编译不通过是因为数组a=toArray(number), 不能这么用,a相当于const int *型指针,不能赋值;
而且你的函数返回的是局部变量地址,会得到意想不到的值.

论坛徽章:
0
4 [报告]
发表于 2006-07-16 16:50 |只看该作者
这样也许好些:


  1. int toArray(int number,int a[],int size)
  2. {

  3.     for (int i = size - 1;i >= 0;i--)
  4.     {
  5.         a[i] = number % 10;
  6.         number /= 10;
  7.     }
  8.     return number > 10 ? -1:0;
  9. }

复制代码

论坛徽章:
0
5 [报告]
发表于 2006-07-16 17:07 |只看该作者
原帖由 rainfly100 于 2006-7-16 16:42 发表



编译不通过是因为数组a=toArray(number), 不能这么用,a相当于const int *型指针,不能赋值;
而且你的函数返回的是局部变量地址,会得到意想不到的值.

奥,涨知识了,谢谢。但不知道能不能告诉我具体应该怎么改正?谢谢

论坛徽章:
0
6 [报告]
发表于 2006-07-16 17:36 |只看该作者
原帖由 fedoracore4 于 2006-7-16 17:07 发表

奥,涨知识了,谢谢。但不知道能不能告诉我具体应该怎么改正?谢谢



Sample TextSample Text
看三楼的啊,自己想想.

论坛徽章:
0
7 [报告]
发表于 2006-07-16 18:16 |只看该作者
原帖由 fedoracore4 于 2006-7-16 16:13 发表
int a[size];
int *toArray(int number)
{
    int i;
    int temp[SIZE];
    for (i = SIZE - 1;i >= 0;i--)
    {
        temp = number % 10;
        number /= 10;
    }
    return temp...

在c专家编程里,曾讲过这样一个案例,就是说的这个return 函数局部变量的问题.
当控制流离开声明自动变量(局部变量)的范围时,自动变量会失效.

论坛徽章:
0
8 [报告]
发表于 2006-07-16 23:34 |只看该作者
原帖由 luckydog1984 于 2006-7-16 18:16 发表

在c专家编程里,曾讲过这样一个案例,就是说的这个return 函数局部变量的问题.
当控制流离开声明自动变量(局部变量)的范围时,自动变量会失效.


局部变量自动失效,这一说法根本是靠不住的

虽然离开了作用范围,它还是存的,直到它被覆盖

我只认同“局部变量被抛弃”这一说法

论坛徽章:
0
9 [报告]
发表于 2006-07-17 08:41 |只看该作者
  1. int *toArray(int number)
  2. {
  3.          int *p = NULL;
  4.          if((p = (int *)calloc(number,sizeof(int))) ==NULL)
  5.          {
  6.                  error.........;
  7.          }
  8.          return p;
  9. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP