在C中使用2d数组时出现“标量初始化程序周围的括号过多”错误

时间:2019-03-05 01:42:58

标签: c multidimensional-array

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

/Users/harry/Dropbox/C/Practise/test_1/main.c:157:9: error: expected expression
int[,] numberGrid = {  
   ^   
/Users/harry/Dropbox/C/Practise/test_1/main.c:158:9: warning: too many braces  
around scalar initializer [-Wmany-braces-around-scalar-init]  
    {1, 2, 3 },

我的代码是:

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

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

1 个答案:

答案 0 :(得分:0)

如评论中所述,符号int[,] numberGrid = { …根本不是C。

如果您写过:

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

或:

int numberGrid[][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位计算机上的数据截断等)。