C 即使对变量使用常量,也可能无法初始化变量大小的对象

C 即使对变量使用常量,也可能无法初始化变量大小的对象,c,C,我使用常量分配变量,但数组显示错误“变量大小的对象可能未初始化” #包括 int main() { 城市常数=10; const int week=2; int arr[城市][周]={34,34,64,23,65,22,65,77,42,74,22,88,46,34,77,53,63457234723}; 对于(int i=0;i您有几个问题 您在主题中发布了它,就是您不能对数组长度使用const int,然后对其进行初始化,因为它将成为一个可变大小的对象,并且您不能用常量对其进行初始化。您可

我使用常量分配变量,但数组显示错误“变量大小的对象可能未初始化”

#包括
int main()
{
城市常数=10;
const int week=2;
int arr[城市][周]={34,34,64,23,65,22,65,77,42,74,22,88,46,34,77,53,63457234723};

对于(int i=0;i您有几个问题

  • 您在主题中发布了它,就是您不能对数组长度使用const int,然后对其进行初始化,因为它将成为一个可变大小的对象,并且您不能用常量对其进行初始化。您可以使用#ifdef定义城市/周,这样就不会发生

  • 您使用了比较(=)而不是赋值(=)

  • 更改:

    int arr[city][week]=={34,34,64,23,65,22,65,77,42,74,22,88,46,34,77,53,63,457,234,723};
    
    致:

  • 您需要更改printf并可能添加换行符:

    printf(“%d\n”,arr[i][j])

  • 因此,总结一下:

    #include <stdio.h>
    #define city 10
    #define week 2
    int main()
    {
        int arr[city][week]={34,34,64,23,65,22,65,77,42,74,22,88,46,34,77,53,63,457,234,723};
        for(int i=0;i<city;i++)
        {
            for(int j=0;j<week;j++)
            {
                printf("%d\n", arr[i][j]);
            }
        }
    }
    
    #包括
    #定义城市10
    #定义第2周
    int main()
    {
    int arr[城市][周]={34,34,64,23,65,22,65,77,42,74,22,88,46,34,77,53,63457234723};
    
    对于(int i=0;i
    =
    比较,
    =
    赋值
    您甚至可以打印相同的输出

    我还希望使用
    {a,b},{c,d}…

    您正在为数组维度使用
    const
    限定变量,而不是“整型常量表达式”。对于c,这意味着您的数组是一种可变修改类型,c不允许使用初始值设定项


    正如其他人已经告诉您的那样,如果允许初始化,语法必须是
    =
    ,而不是
    =

    ,不完全是重复,但您应该阅读,我假设在您的真实代码中,您没有
    =
    ,而是
    =
    ,因为否则错误消息没有多大意义。错误消息指示原始源代码中不存在
    =
    ,因为该消息是尝试使用
    =
    初始化可变长度数组的结果。如果此时代码中存在
    =
    ,则消息会有所不同。因此我们知道问题中的
    =
    是在准备问题时输入的错误因此,应该通过编辑问题或向OP发出请求,而不是发布答案来修复此问题。换句话说,此答案不会回答所询问的真实问题。错误消息表示原始源代码中不存在
    =
    ,因为该消息是尝试初始化的结果,即h
    =
    ,一个可变长度数组。如果当时代码中有一个
    =
    ,则消息会有所不同。因此我们知道问题中的
    =
    是在准备问题时输入的错误,因此应该通过编辑问题或向OP发出请求来修复,而不是发布答案。换句话说s、 这个答案并没有回答被问到的真正问题。@EricPostChil你是对的,我的答案解决了发布的代码,但它没有“解决”发布的代码也是,因为它留下了一个可变长度数组的初始化,违反了C 2018 6.7.9 3中的约束。感谢您澄清这一点,更改了我的答案。很抱歉==操作数是我打算使用的输入错误=
    int arr[city][week]={34,34,64,23,65,22,65,77,42,74,22,88,46,34,77,53,63,457,234,723};
    
    #include <stdio.h>
    #define city 10
    #define week 2
    int main()
    {
        int arr[city][week]={34,34,64,23,65,22,65,77,42,74,22,88,46,34,77,53,63,457,234,723};
        for(int i=0;i<city;i++)
        {
            for(int j=0;j<week;j++)
            {
                printf("%d\n", arr[i][j]);
            }
        }
    }