我在更新用于计算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被破坏——可能是一个错误的指针引用。

09-06 09:13