Answers:
我假设您正在使用C99编译器(支持动态大小的数组)。您的代码中的问题是,当编译器看到您的变量声明时,它无法知道数组中有多少个元素(我在这里也假设来自编译器的错误,length
它不是编译时间常数)。
您必须手动初始化该数组:
int boardAux[length][length];
memset( boardAux, 0, length*length*sizeof(int) );
printf( "%d", boardAux[1][2] )
编译。编译器知道大小,并且知道第(1,2)个元素在内存中的哪个位置。如果使用动态分配的数组是一维的,你必须自己进行数学运算:printf("%d", boardAux[ 1*length + 2 ])
memset
调出的错误。我刚刚更正了它。
length
是static
?在C ++ 14中,它可以正常工作。
收到此错误的原因是,在C语言中,不允许将初始化程序与可变长度数组一起使用。您收到的错误消息基本上说明了一切。
6.7.8初始化
...
3要初始化的实体的类型应为未知大小的数组或不是可变长度数组类型的对象类型。
这给出了错误:
int len;
scanf("%d",&len);
char str[len]="";
这也会产生错误:
int len=5;
char str[len]="";
但这很好用:
int len=5;
char str[len]; //so the problem lies with assignment not declaration
您需要通过以下方式实现价值:
str[0]='a';
str[1]='b'; //like that; and not like str="ab";
声明数组后
int boardAux[length][length];
将初始值赋为零的最简单方法是使用for循环,即使它可能有点长
int i, j;
for (i = 0; i<length; i++)
{
for (j = 0; j<length; j++)
boardAux[i][j] = 0;
}
memset
更简单,更快捷。
int size=5;
int ar[size ]={O};
/* This operation gives an error -
variable sized array may not be
initialised. Then just try this.
*/
int size=5,i;
int ar[size];
for(i=0;i<size;i++)
{
ar[i]=0;
}
对于C ++,像这样分别声明和初始化。
int a[n][m] ;
a[n][m]= {0};
你做不到。C编译器无法在堆栈上执行如此复杂的操作。
您必须使用堆和动态分配。
您真正需要做的是:
使用* access(boardAux,x,y,size)= 42与矩阵进行交互。