| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 691 人关注过本帖, 1 人收藏
标题:在Linux环境下编的C 帮忙看看哪里错了
只看楼主 加入收藏
williamweng
Rank: 1
等 级:新手上路
帖 子:34
专家分:2
注 册:2010-10-7
结帖率:83.33%
收藏(1)
已结贴  问题点数:10 回复次数:14 
在Linux环境下编的C 帮忙看看哪里错了
程序代码:
#include<stdio.h>

#define SIZE (10)

void fill (int array[SIZE]){
    int i;
    for(i=0;i<sizeof(array);i++)
        array[i]=i;
}

int main(){
    int array[SIZE];
    fill(array);

    int i;
    printf("===dump array===\n");
    printf("%d\n",SIZE);
    for(i=0;i<SIZE;i++){
        printf("%d",array[i]);
    }
    printf("\n===end===\n");
    return 0;
}

在SIZE那里之前定义为4的时候还没问题,但把数弄大点就有问题了,为什么啊?
搜索更多相关主题的帖子: Linux 
2012-11-13 18:13
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:10 
数组退化为指针?
2012-11-13 18:18
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
数组为参数的函数一般用void fill (int array[],int n)这样的形式

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-11-13 18:23
williamweng
Rank: 1
等 级:新手上路
帖 子:34
专家分:2
注 册:2010-10-7
收藏
得分:0 
回复 2楼 zklhp
?什么意思?能详细点吗?
2012-11-13 18:24
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用williamweng在2012-11-13 18:24:37的发言:

?什么意思?能详细点吗?

简单来说 当数组作为参数传递给函数的时候 数组就相当于一个指针了 sizeof(array) 得到的结果就和指针的大小一致

一个比较容易的解决方法是在传递参数的时候把大小一块传了

关于这个问题可以百度一下 有很多讨论的
2012-11-13 18:28
williamweng
Rank: 1
等 级:新手上路
帖 子:34
专家分:2
注 册:2010-10-7
收藏
得分:0 
回复 2楼 zklhp
但是我在开头就定义了SIZE,照你说的void fill(int array[],int n)的话,我不是要在fill()函数里面给SIZE赋值了?
2012-11-13 18:29
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用williamweng在2012-11-13 18:29:30的发言:

但是我在开头就定义了SIZE,照你说的void fill(int array[],int n)的话,我不是要在fill()函数里面给SIZE赋值了?

void fill(int array[],int n)

这样的话 调用可以用

fill(array, sizeof(array));

不就避免了在函数内sizeof了么 不就不会出现sizeof等于4的情况了
2012-11-13 18:31
williamweng
Rank: 1
等 级:新手上路
帖 子:34
专家分:2
注 册:2010-10-7
收藏
得分:0 
回复 7楼 zklhp
还是一样的出问题啊
2012-11-13 18:39
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用williamweng在2012-11-13 18:39:48的发言:

还是一样的出问题啊
上面说的不准确 确切的说是这样

程序代码:
#include<stdio.h>

#define SIZE (10)

void fill (int array[SIZE], int size){
    int i;
    for(i=0;i<size;i++)
        array[i]=i;
}

int main(){
    int array[SIZE];
    fill(array, sizeof(array)/sizeof(int));

    int i;
    printf("===dump array===\n");
    printf("%d\n",SIZE);
    for(i=0;i<SIZE;i++){
        printf("%d",array[i]);
    }
    printf("\n===end===\n");
    return 0;
}



这总没错了罢
2012-11-13 18:44
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
顺便 楼主的代码风格不错 经典的K&R风格
2012-11-13 18:48
快速回复:在Linux环境下编的C 帮忙看看哪里错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058427 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved