在C中使用2d数组时出现“标量初始值设定项周围大括号过多”错误

在C中使用2d数组时出现“标量初始值设定项周围大括号过多”错误,c,multidimensional-array,C,Multidimensional Array,我仍在学习C,但当我尝试使用2d数组时,会出现以下错误: 我的代码是: int main() { int[,] numberGrid = { {1, 2, 3 }, {4, 5, 6 }, {7, 8, 9 } }; printf("%d\n", numberGrid[1, 1]); } 如注释中所述,表示法int[,]numberGrid={…表示法根本不是C 如果你写了: int numberGrid[3][3] =

我仍在学习C,但当我尝试使用2d数组时,会出现以下错误:

我的代码是:

int main() {
    int[,] numberGrid = {
        {1, 2, 3 },
        {4, 5, 6 },
        {7, 8, 9 }
    };

    printf("%d\n", numberGrid[1, 1]);
}

如注释中所述,表示法int[,]numberGrid={…表示法根本不是C

如果你写了:

int numberGrid[3][3] = {
    {1, 2, 3 },
    {4, 5, 6 },
    {7, 8, 9 }
};
或:

您将能够编译数组初始值设定项

然后需要修复printf以打印数组元素。逗号在C中的下标中没有用处。在大多数实际情况下,它“永远”不会出现在下标中-如果您足够努力,您可以发明异常,但您不应该正常编写此类代码

你可以写:

printf("%d\n", numberGrid[1][1]);

要打印5。作为写入的printf%d\n,numberGrid[1,1];,您正在将地址打印为带符号的十进制整数,这不能保证在64位计算机上进行数据截断等操作。

表示法int[,]无效C。您可能指的是int numberGrid[3][3]=……在C中,在数组初始化中,也只能省略最后一个维度大小iirc@JonathanLeffler当我将其更改为,我得到一个完全错误的结果时,输出为:-321090932@HarryStanley是的,因为正如我们所说,这不是声明和访问多dims数组的C语法。您需要numberGrid[1][1]好的,你必须修改代码使其能够编译,这就是进展。然而,你仍然应该从编译器那里得到警告-你使用的是GCC或可能是Clang,所以你应该使用GCC-std=c11-Wall-Werror…作为我自己工作的开始,我添加了-Wextra-Wmissing prototype-Wstrict prototype。你似乎是inf受C语言以外的语言影响-例如Fortran、Pascal、Algol、Ada或…在下标中不能有效地使用逗号。您需要printf%d\n、gridNumber[1][1];才能打印5。您得到的是数组第1行的地址。非常感谢这有助于了解我的错误所在。
int numberGrid[][3] = {
    {1, 2, 3 },
    {4, 5, 6 },
    {7, 8, 9 }
};
printf("%d\n", numberGrid[1][1]);