C 数组索引中的后增量和赋值
我遇到了一段我发现很难破译的简洁代码C 数组索引中的后增量和赋值,c,C,我遇到了一段我发现很难破译的简洁代码 for (int k = 0; k < count; k++) { C[p=w[T[k]]++] = Y1[k]; CC[p] = Y2[k] } 我无法计算当k=0时数组C和CC将得到什么索引,以及一种轻松读取代码的方法 这就是我一直试图做的 什么时候 重写它。此代码相当于: for (int k = 0; k < count; k++) { p = w[T[k]]++; C[p] = Y1[k]; C
for (int k = 0; k < count; k++)
{
C[p=w[T[k]]++] = Y1[k];
CC[p] = Y2[k]
}
我无法计算当k=0时数组C
和CC
将得到什么索引,以及一种轻松读取代码的方法
这就是我一直试图做的
什么时候
重写它。此代码相当于:
for (int k = 0; k < count; k++)
{
p = w[T[k]]++;
C[p] = Y1[k];
CC[p] = Y2[k]
}
for(int k=0;k
这和
for (int k = 0; k < count; k++)
{
p = w[T[k]]; // For k=0 => w[2]=6 => p=6
w[T[k]]++; // For k=0 => increment w[2], so w[2] is 7
C[p] = Y1[k]; // C[6] = Y1[0]
CC[p] = Y2[k] // CC[6] = Y2[0]
}
for(int k=0;kw[2]=6=>p=6
w[T[k]]++;//对于k=0=>增量w[2],因此w[2]是7
C[p]=Y1[k];//C[6]=Y1[0]
CC[p]=Y2[k]//CC[6]=Y2[0]
}
重写它。此代码相当于:
for (int k = 0; k < count; k++)
{
p = w[T[k]]++;
C[p] = Y1[k];
CC[p] = Y2[k]
}
for(int k=0;k
这和
for (int k = 0; k < count; k++)
{
p = w[T[k]]; // For k=0 => w[2]=6 => p=6
w[T[k]]++; // For k=0 => increment w[2], so w[2] is 7
C[p] = Y1[k]; // C[6] = Y1[0]
CC[p] = Y2[k] // CC[6] = Y2[0]
}
for(int k=0;kw[2]=6=>p=6
w[T[k]]++;//对于k=0=>增量w[2],因此w[2]是7
C[p]=Y1[k];//C[6]=Y1[0]
CC[p]=Y2[k]//CC[6]=Y2[0]
}
“拆分”该语句为多个语句,将嵌套索引分隔开,它就会变得清晰。@P.P.我尝试过,但得到了错误的答案。我得到的索引是6和6,但正确的值是7。@Morpheus好吧,把你所做的一切都发布出来,以便其他人能够验证或指出它的错误。此外,这种“聪明”的代码没有太多实际用途。如果我没记错的话,这是一种未定义的行为,在读取内存后可能会发生增量。找到编写此代码的人,并射击他们。或者,如果这违反了你的道德或你居住的地方是非法的,那就向他们扔烂西红柿。把那个语句“拆分”成多个语句,将嵌套索引分开,它就会变得清晰。@P.P.我试过了,但我得到了错误的答案。我得到的索引是6和6,但正确的值是7。@Morpheus好吧,把你所做的一切都发布出来,以便其他人能够验证或指出它的错误。此外,这种“聪明”的代码没有太多实际用途。如果我没记错的话,这是一种未定义的行为,在读取内存后可能会发生增量。找到编写此代码的人,并射击他们。或者,如果这违反了你的道德或你居住的地方是非法的,那就向他们扔烂西红柿。