0 + = VARIABLE如何导致VARIABLE + 1?

时间:2011-03-05 18:47:12

标签: c operators increment

在更新用于计算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
}

2 个答案:

答案 0 :(得分:3)

就编译器而言

iCount += packedCount;
iCount = iCount + packedCount;

是完全相同的。如果它们产生不同的结果,那么代码中的某些内容会导致iCount被删除 - 可能是一个错误的指针引用。

答案 1 :(得分:1)

试试这个以及您可以想到的其他变体:

#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
    }
    printf("iCount after the inner loop: %d\n", iCount);             /* DEBUG */
    printf("packedCount after the inner loop: %d\n", packedCount);   /* DEBUG */

    //iCount+= packedCount; //this produces 8 for 0+packedCount

    //this works
    iCount= iCount+packedCount; //skip the next byte in array, since it was already packed

    printf("iCount after update: %d\n", iCount);                     /* DEBUG */
}