Chinaunix首页 | 论坛 | 博客
  • 博客访问: 443370
  • 博文数量: 155
  • 博客积分: 786
  • 博客等级: 军士长
  • 技术积分: 1561
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-01 23:37
个人简介

在路上

文章分类

全部博文(155)

文章存档

2016年(2)

2015年(36)

2014年(45)

2013年(34)

2012年(38)

我的朋友

分类: C/C++

2013-06-09 16:58:10

点击(此处)折叠或打开

  1. 标题:关于*p++的问题
  2. 问题:此函数的求和是从什么位置开始的。
  3. uint chksum(uint len, uchar *p)
  4. {
  5.     uint sum,i;
  6.     sum=0;
  7.     for(i=0;i<len;i++)
  8.     {
  9.         sum+=*(p++);
  10.     }
  11.     return sum;
  12. }
  13. 分析:*p++,由于++*同优先级,结合方向自右而左,等价于*(p++),即等价于sum=sum+*(p++);
  14. 假如该函数的调用形式为 :
  15. uchar a[20];
  16. chksum(10,(uchar *)&a);那么这个求和是从a[1]开始求和的吗?结果为不是,Why?
  17. 当i=0时,执行循环体,*(p++)优先级决定了结合方向。但是P++是自增运算。是先将P的值参与“*”取内容运算,再自加1.
  18. 例如:
  19. ++i i 自增1 后再参与其它运算。
  20. --i i 自减1 后再参与其它运算。
  21. i++ i 参与运算后,i的值再自增 1。
  22. i-- i 参与运算后,i的值再自减 1。
  23. 所以:以上调用是从a[0]-a[9]求和。

阅读(467) | 评论(0) | 转发(0) |
0

上一篇:CGI的介绍

下一篇:三相交流电线序问题

给主人留下些什么吧!~~