错误:数组下标不是整数

时间:2014-02-27 10:24:27

标签: c

 int row,col,i,j,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7;
 if(M==64&&N==64){
    for(row=0;row<N;row+=8){
        for(col=0;col<M;col+=8){
             for(j=0;j<2;j++){
                for(i=row;i<row+4;i++){
                    tmp0=A[i+4j][col+0];
                    tmp1=A[i+4j][col+1];
                    tmp2=A[i+4j][col+2];
                    tmp3=A[i+4j][col+3];
                    tmp4=A[i+4j][col+4];
                    tmp5=A[i+4j][col+5];
                    tmp6=A[i+4j][col+6];
                    tmp7=A[i+4j][col+7];

                    B[col+0+4j][i]=tmp0;
                    B[col+1+4j][i]=tmp1;
                    B[col+2+4j][i]=tmp2;
                    B[col+3+4j][i]=tmp3;
                    B[col+0+4j][i+4]=tmp4;
                    B[col+1+4j][i+4]=tmp5;
                    B[col+2+4j][i+4]=tmp6;
                    B[col+3+4j][i+4]=tmp7;

                }

但我得到的代码是错误:数组下标不是整数。但我不知道为什么。 有人可以看看并告诉我为什么吗? 我不认为除了int之外我在数组中使用其他类型。

4 个答案:

答案 0 :(得分:3)

C不支持像数学中常见的隐式乘法。它显然不起作用,因为变量名称可能不止一个字母,它会产生大量的解析混淆。

根据您的(隐含)逻辑,row < N之类的表达应该与r * o * w < N相同,这显然不是您真正想到的。

因此,必须始终使用*二元运算符显式进行乘法运算:4j是一个解析错误,您的意思是4 * j

答案 1 :(得分:1)

 int row,col,i,j,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7;
  if(M==64&&N==64){
    for(row=0;row<N;row+=8){
        for(col=0;col<M;col+=8){
         for(j=0;j<2;j++){
            for(i=row;i<row+4;i++){
                tmp0=A[i+4*j][col+0];
                tmp1=A[i+4*j][col+1];
                tmp2=A[i+4*j][col+2];
                tmp3=A[i+4*j][col+3];
                tmp4=A[i+4*j][col+4];
                tmp5=A[i+4*j][col+5];
                tmp6=A[i+4*j][col+6];
                tmp7=A[i+4*j][col+7];

                B[col+0+4*j][i]=tmp0;
                B[col+1+4*j][i]=tmp1;
                B[col+2+4*j][i]=tmp2;
                B[col+3+4*j][i]=tmp3;
                B[col+0+4*j][i+4]=tmp4;
                B[col+1+4*j][i+4]=tmp5;
                B[col+2+4*j][i+4]=tmp6;
                B[col+3+4*j][i+4]=tmp7;

            }

答案 2 :(得分:0)

tmp0=A[i+4j][col+0];

应该是

tmp0=A[i+4*j][col+0];

在所有地方更换

答案 3 :(得分:0)

应明确调用乘法:在您的情况下,4 * j而不是4j。