左侧后增量

我的印象是,后增量(OR preincrement)只能在相等(=)的右侧进行.但我能够编译下面的代码.
你能帮助我理解这个特定的代码,特别是在线下.
来源: 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;

如果data8等于0x20,则它等于:

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

要么

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

因为没有办法做出这个决定,(因为你在读取变量时编辑了一个变量,没有交错序列点),这是未定义的行为.

我们可以谈谈下面这段代码的作用.这可能是上述代码的意图.

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

在这里所做的事情希望更加直截了当.您正在使用输入数组,并查看它,因此它是一系列8位数字.然后,就地,你否定每一个.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...