为什么我的数组初始化没有编译?

时间:2013-05-03 15:07:43

标签: c multidimensional-array

当我在MSVS中运行代码时,编译器会给出

“错误1错误C2059:语法错误:'{'

我确信我正在声明并初始化双维数组。 语法错误在哪里?

#include <stdio.h>
#define STUDENTS 3
#define EXAM 4
void printArray(int array[][EXAM]);

int main(void){

int array[STUDENTS][EXAM];
array={ { 77, 68, 86, 73 },{ 96, 87, 89, 78 },{ 70, 90, 86, 81 } };

3 个答案:

答案 0 :(得分:4)

您必须在单个语句中声明并初始化数组。

int array[STUDENTS][EXAM]={ { 77, 68, 86, 73 },{ 96, 87, 89, 78 },{ 70, 90, 86, 81 } };

如果你真的需要从声明中单独初始化数组,那么你需要通过单独设置每个成员来艰难地完成它。

array[0][0] = 77;
...

答案 1 :(得分:3)

在C99中,您可以使用复合文字:

int (*array)[EXAM];
array = (int[STUDENTS][EXAM]){ { 77, 68, 86, 73 },{ 96, 87, 89, 78 },{ 70, 90, 86, 81 } };
编辑:正如格雷厄姆所说:在这里,你没有初始化一个预先声明的数组;您正在初始化一个新数组,然后将其地址分配给指针

答案 2 :(得分:2)

array={ { 77, 68, 86, 73 ... };是无效的语法。

这种表达式应该在初始化期间使用,如下所示:

int myArray[5] = { 0 };

有关数组初始化的详细概述,请查看此question