错误:数组下标不是整数

  • 本文关键字:整数 下标 数组 错误 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.之外,我不认为我在数组中使用其他类型

C不支持数学中常见的隐式乘法。这显然是行不通的,因为变量名可以是多个字母,这会造成大量的解析混乱。

根据你的(隐含的)逻辑,像row < N这样的表达式应该和r * o * w < N一样,这显然不是你真正想的。

因此,乘法必须始终使用*二进制运算符显式完成:4j是一个解析错误,您指的是4 * j

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;
}
tmp0=A[i+4j][col+0];

应该是

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

在所有位置更换

应该显式调用乘法:在您的情况下,使用4*j而不是4j。

最新更新