左侧后增量
发布时间:2020-12-16 04:56:20 所属栏目:百科 来源:网络整理
导读:我的印象是,后增量(OR preincrement)只能在相等(=)的右侧进行.但我能够编译下面的代码. 你能帮助我理解这个特定的代码,特别是在线下. 来源: http://www.ibm.com/developerworks/library/pa-dalign/ *data8++ = -*data8;void Munge8( void *data,uint32_t si
我的印象是,后增量(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位数字.然后,就地,你否定每一个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读