填充数组中多行的不寻常方式非递归?

时间:2015-01-14 13:08:17

标签: c

您好我正在调试一个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?

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编制索引。