C语言 可变大小的对象可能未初始化

ffscu2ro  于 2023-01-04  发布在  其他
关注(0)|答案(1)|浏览(148)

在第6行中,int型变量大小的对象可能没有初始化,int型变量有什么问题吗?我该如何修复它?

#include <stdio.h>
int main (void)
{
    const int SIZE=5;
    //variable remain constant
    int grades[SIZE]= {66,50,93,67,100};
    double sum= 0.0;
    int i;
    
    printf("\nMy grades are:\n");

    for (i=0;i<SIZE;i++)//0 first character and < because last character is sentinel
        printf("%d\t",grades[i]);

    printf("\n\n");
    for (i=0;i<SIZE;i++) //analyze data in list and retrieve it
        sum=sum+grades[i];
    
    printf("My average is %.2f\n\n",sum/SIZE); //sum /size for average with decimals
    return 0;
}

我希望用简单的一维数组求平均值,但是这个问题不允许我运行这个程序

wvyml7n5

wvyml7n51#

*SIZE不是 * 常量

SIZE是一个const int,但是,听起来很奇怪,它仍然不是一个 * 常量 *。grades[SIZE]是一个 * 可变长度数组 *。可变长度数组不能被初始化。*1

const int SIZE=5;
int grades[SIZE]= {66,50,93,67,100};// error: variable-sized object may not be initialized

备选案文1:使用 * 常量*

5int类型的 * 常数 *。

#define SIZE 5
int grades[SIZE]= {66,50,93,67,100};

备选案文2:立即分配

从某个源(可能是 compound literal)赋值或复制值。

const int SIZE=5;
int grades[SIZE];
               v-----------------------v compound literal
memcpy(grades, (int []){66,50,93,67,100}, sizeof grades);
  • 1也许C的未来版本将允许这样做。

相关问题