我在更新用于计算switch语句变量的计数器时遇到了一个奇怪的错误。int iCount
在循环外被赋值为零,它是while循环使用的计数器。
为了更新循环中的计数器,我编写了iCount+= packedCount
,在本例中packedCount是7。但是,在调试器中,0+=packedCount导致packedCount+1,即8。这导致一个数组槽在整个循环中未填充。
当我将行更改为icount= packedCount+iCount
时,返回正确的值。
所以,这种行为是C特有的吗,就像我在Java中经常做的那样,没有任何奇怪的效果。
编辑-添加了代码段
#define SKIP 8
#define PACKED 7
int iCount;
iCount=0;
while (iCount < characters-1){
for (packedCount=iCount; packedCount< iCount+PACKED; packedCount++){
//ASCII compressor logic goes here
}
//iCount+= packedCount; //this produces 8 for 0+packedCount
//this works
iCount= iCount+packedCount; //skip the next byte in array, since it was already packed
}
最佳答案
就编译器而言
iCount += packedCount;
iCount = iCount + packedCount;
都一样。如果它们产生不同的结果,那么代码中的某些内容会导致iCount被破坏——可能是一个错误的指针引用。