为什么我收到错误“可变大小的物体可能无法初始化”下面的代码?
int boardAux[length][length] = {{0}};
为什么我收到错误“可变大小的物体可能无法初始化”下面的代码?
int boardAux[length][length] = {{0}};
我假设你使用的是C99编译器(带有动态调整阵列的支持)。 在你的代码的问题是,在当编译器看到你的变量声明的时候就不能知道有多少元素在数组中(我也是在此假设,从编译器错误length
不是编译时间常数)。
您必须手动初始化数组:
int boardAux[length][length];
memset( boardAux, 0, length*length*sizeof(int) );
您收到此错误,因为在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];
分配的初始值为零的最简单的方法是使用用于环路,即使它可能有点冗长
int i, j;
for (i = 0; i<length; i++)
{
for (j = 0; j<length; j++)
boardAux[i][j] = 0;
}
简单地声明长度是一个缺点,如果不是,那么你应该动态分配内存
对于C ++单独的声明和初始化这样的..
int a[n][m] ;
a[n][m]= {0};
你做不了。 C编译器不能做堆这样的复杂的东西。
你必须使用堆和动态分配。
你真正需要做的:
使用*访问(boardAux,X,Y,大小)= 42,以与该基质相互作用。