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之外我在数组中使用其他类型。
答案 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。