您好我正在调试一个C应用程序,并在一个包含10行和4列的数组中查看这个奇怪的行为:
void fillArray(int *B){
//DEBUG
printArray(B,10,4);//printing all items 0's
B[3,0] = 3;
printArray(B,10,4); // results in B[0,0] = 3 , B[1,0] = 3 , B[2,0] = 3 , B[3,0]= 3 , ...
// Rest values remains zero.
}
void printArray(int *B,int imax,int jmax){
printf(" \n --- Check---");
for(i=0;i<imax;i++){
for(j=0;j<jmax;j++){
printf(" \n Check: B[%d,%d]=%d ",i,j,B[i,j]);
}
}
}
为什么在第0列的表格的每一行都插入了值3?
答案 0 :(得分:1)
您正在使用表达式3, 0
来索引数组。该表达式的值为0(它使用序列运算符,其值是最后一个表达式的值,在此常量为0)。要在C中索引多维数组,您需要使用类似m[a][b]
。
答案 1 :(得分:1)
在C中,二维数组的语法是:
B[3][0] = 3
而不是:
B[3,0] = 3;`
,
是逗号运算符,具有其他含义(基本上,表达式a, b
的值为b
)。
答案 2 :(得分:0)
因为,
运算符会丢弃除最后一个之外的所有操作数。所以这个
B[3,0] = 3;
实际上是
B[0] = 3;
你的桌子有多少列?因为它是int *
我怀疑你有一张桌子。建议的语法
B[3][0] = 3;
也是错误的,因为B[3]
的类型为int
,您无法为int
编制索引。