返回信息流有一句C语言:sum+=*((unsigned short *)p_ip_hdr)++;
我将它拆成以下:((unsigned short *)p_ip_hdr)++;
sum+=(unsigned short)*((unsigned short *)p_ip_hdr);
但跟原来输出结果有出入,大牛帮忙解释一下问题出在哪。
ps:p_ip_hdr是一个指向某个结构体的指针
这是一条镜像帖。来源:北邮人论坛 / cpp / #6075同步于 2008/5/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助]大牛帮忙解释下
abobo
2008/5/2镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
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);
: ...................
你说的有点问题吧,*和++优先级是一样的,应该这样改:
sum+=*((unsigned short *)p_ip_hdr;
(unsigned short *)p_ip_hdr++; //(unsigned short *)可不能丢啊
【 在 ox 的大作中提到: 】
: sum+=*((unsigned short *)p_ip_hdr)++;
: 这句的第一个 *的运算级别 比 ++ 高
: 第一句的++不是移动指针,是把那个unsigned short的值加1
ox解释得没有问题啊
就是先和*结合,然后和++结合。
或者说,先把这个值取出来,然后再将这个值自加并且并入sum,指针并没有移动。
但是LZ那么改,就是不断地取相邻单元内的数据,并加入到sum中,指针是不断向后移动的。
怎么没问题呢?
这句的第一个 *的运算级别 比 ++ 高 //严谨的说,两者优先级是相同的,虽然编译器对*先处理
第一句的++不是移动指针,是把那个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 *)可不能丢啊