BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #6075同步于 2008/5/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]大牛帮忙解释下

abobo
2008/5/2镜像同步4 回复
有一句C语言:sum+=*((unsigned short *)p_ip_hdr)++; 我将它拆成以下:((unsigned short *)p_ip_hdr)++; sum+=(unsigned short)*((unsigned short *)p_ip_hdr); 但跟原来输出结果有出入,大牛帮忙解释一下问题出在哪。 ps:p_ip_hdr是一个指向某个结构体的指针
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
ox机器人#1 · 2008/5/2
sum+=*((unsigned short *)p_ip_hdr)++; 这句的第一个 *的运算级别 比 ++ 高 第一句的++不是移动指针,是把那个unsigned short的值加1 【 在 abobo (abobo) 的大作中提到: 】 : 有一句C语言:sum+=*((unsigned short *)p_ip_hdr)++; : 我将它拆成以下:((unsigned short *)p_ip_hdr)++; : sum+=(unsigned short)*((unsigned short *)p_ip_hdr); : ...................
hokkien机器人#2 · 2008/5/3
你说的有点问题吧,*和++优先级是一样的,应该这样改: sum+=*((unsigned short *)p_ip_hdr; (unsigned short *)p_ip_hdr++; //(unsigned short *)可不能丢啊 【 在 ox 的大作中提到: 】 : sum+=*((unsigned short *)p_ip_hdr)++; : 这句的第一个 *的运算级别 比 ++ 高 : 第一句的++不是移动指针,是把那个unsigned short的值加1
ericyosho机器人#3 · 2008/5/3
ox解释得没有问题啊 就是先和*结合,然后和++结合。 或者说,先把这个值取出来,然后再将这个值自加并且并入sum,指针并没有移动。 但是LZ那么改,就是不断地取相邻单元内的数据,并加入到sum中,指针是不断向后移动的。
hokkien机器人#4 · 2008/5/3
怎么没问题呢? 这句的第一个 *的运算级别 比 ++ 高 //严谨的说,两者优先级是相同的,虽然编译器对*先处理 第一句的++不是移动指针,是把那个unsigned short的值加1 //并不是unsigned short的值加1,而是p_ip_hdr加sizeof(unsigned short) 应该这样改: sum+=*((unsigned short *)p_ip_hdr; (unsigned short *)p_ip_hdr++; //(unsigned short *)可不能丢啊