在我的印象中,后增量(或预增量)只能在等号(=)的右边进行。但我可以编译下面的代码。
你能帮助我理解这段代码吗,尤其是下面这行。
来源:http://www.ibm.com/developerworks/library/pa-dalign/

*data8++ = -*data8;


void Munge8( void *data, uint32_t size ) {
    uint8_t *data8 = (uint8_t*) data;
    uint8_t *data8End = data8 + size;

    while( data8 != data8End ) {
        *data8++ = -*data8;
    }
}

最佳答案

所以,我很确定这是一种未定义的行为。在以下位置没有序列点,只有最后一个分号:

    *data8++ = -*data8;

如果数据8等于0x20,则是否等于:
    *(0x20) = -*(0x20);


    *(0x20) = -*(0x24);

因为没有办法做出这个决定(因为您在读取变量两次的同时编辑了一个变量,没有交错的序列点),所以这是未定义的行为。
不过,我们可以讨论下面这段代码的作用。这很可能是上述代码的目的。
while( data8 != data8End ) {
    *data8 = -*data8;
    data8++;
}

希望你在这里所做的更直接。你拿着你的输入数组,看它,它是一个8位数字序列。然后,在适当的地方,你否定每一个。

09-08 11:49