| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2457 人关注过本帖
标题:请看一下我为什么将数组一初始化就出错,不初始化就是对的???
只看楼主 加入收藏
积木10086
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2013-11-22
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:18 
请看一下我为什么将数组一初始化就出错,不初始化就是对的???
#include <stdio.h>

void sort(int *a,int n)
{
    int i,j,k,t;
    for(i=0;i<n-1;i++)
    {
        k = i;
        for(j=i+1;j<n;j++)
        {
            if(*(a+k)<*(a+j))
                k=j;
        }
        if(k!=i)
        {
            t = *(a+i);
            *(a+i) = *(a+k);
            *(a+k) = t;
        }
    }
}
int  max(int *a,int n)
{
    int i,max;
    max = i;
    for(i=0;i<n;i++)
    {
        if(*(a+max)<*(a+i))
            max = i;
    }
    return (a[max]);
}
int main()
{
    int i,n;
    printf("Please input the number:\n");
    scanf("%d",&n);
    int arr[n]={0};
    for(i=0;i<n;i++)
    {
        printf("Please input %dth number:\n",i+1);
        scanf("%d",&arr[i]);
    }
    printf("The input number is :\n",n);
    for(i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    sort(arr,n);
    printf("Form big to small order is :\n");
    for(i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    int maxnum = max(arr,n);
    printf("The max number is:\n");
    printf("%5d\n",maxnum);
}

搜索更多相关主题的帖子: include return 
2013-12-22 18:42
积木10086
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2013-11-22
收藏
得分:0 
这是将一个不确定个数的数组排序的函数,将数组初始化就会出现错误,不初始化却是正确的,这是为什么?
2013-12-22 18:43
积木10086
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2013-11-22
收藏
得分:0 
max.c:38:2: error: variable-sized object may not be initialized
max.c:38:2: warning: excess elements in array initializer
max.c:38:2: warning: (near initialization for ‘arr’)
这是现实的错误信息和警告。。
2013-12-22 18:45
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:6 
呃,我记得课本有这么一条~~
在定义数组时:类型说明符 数组名 [常量表达式]
例如 int a[10];   这里面的10不能是变量,例如你的n 。。。

如果要用不知道多少个字符的数组,那么需要分配内存单元 用malloc函数,然后引用指针~~

未知令人期待!
2013-12-22 19:17
ljx小子
Rank: 8Rank: 8
来 自:星星
等 级:蝙蝠侠
威 望:2
帖 子:222
专家分:916
注 册:2013-10-7
收藏
得分:0 
楼上说的是对的,不能让变量作为数组长度。里边只能是常量或者常量表达式

。。。。。。。。。。。
2013-12-22 21:25
积木10086
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2013-11-22
收藏
得分:0 
回复 5楼 ljx小子
但是为什么对数组不初始化,程序运行是正确的?
2013-12-22 22:12
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:6 
不清楚为什么,我尝试了一个测试:
#include<stdio.h>
void main()
{
    int n=5, i;
    int a[n]={0};
    /*对数组定义声明时候,常量表达式的应用。*/
    for(i=0;i<n;i++)
        a[i]=i;
    for(i=0;i<n;i++)
        printf("%-5d",a[i]);
    putchar(10);
}
如果对数组常量表达式应用变量:int a[n]={0}; 程序编译不过去:

--------------------Configuration: 7 - Win32 Debug--------------------
Compiling...
7.c
E:\yangm\学习\编程\C程序\13.12.22\程序纠错\7.c(5) : error C2057: expected constant expression
E:\yangm\学习\编程\C程序\13.12.22\程序纠错\7.c(5) : error C2466: cannot allocate an array of constant size 0
执行 cl.exe 时出错.

7.obj - 1 error(s), 0 warning(s)

未知令人期待!
2013-12-22 22:35
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:0 
呃啊,好吧你当我手贱了。。。。 嗯,这里:

int  max(int *a,int n)
{
    int i,max;
    max = i;
    for(i=0;i<n;i++)
    {
        if(*(a+max)<*(a+i))
            max = i;
    }
    return (a[max]);
}

这是寻找数组里面的最大值的函数,i的值在并没有赋值的情况下赋值给了max(i是什么不知道),这就导致*(a+max)的值是一个不确定数字。有可能比数组每个数字都大,于是里面的选择语句就没有判定为真而执行max=i,于是max的值是一个不确定的数字,那么返回值也是一个不确定的数字,这并不是所期望的结果。

你当我无聊好了。。。

未知令人期待!
2013-12-22 22:44
积木10086
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2013-11-22
收藏
得分:0 
以下是引用神机军师在2013-12-22 22:44:57的发言:

呃啊,好吧你当我手贱了。。。。 嗯,这里:
 
int  max(int *a,int n)
{
    int i,max;
    max = i;
    for(i=0;i

说法是对的,那就应该给max赋初值0,但是如果是max=i,在程序执行过程中,结果为什么并没有影响?
2013-12-23 09:05
积木10086
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2013-11-22
收藏
得分:0 
回复 7楼 神机军师
    int i,n;
    printf("Please input the number:\n");
    scanf("%d",&n);
    int arr[n]={0};

我的也是这种情况,先是输入n的值,和你那个直接给n 赋值一样的效果,但是就是不明白为什么会出错,但是对数组不进行初始化的时候就是对的。。
2013-12-23 09:08
快速回复:请看一下我为什么将数组一初始化就出错,不初始化就是对的???
数据加载中...
 
   



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

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