【C】使用自加(++)和自减(--)运算符时容易出的错误
2014-07-10 03:09
330 查看
int main()
{ int *p, a[5]={1, 3, 5, 7, 9};
p = a;
printf("%d", *p++);
}
[/code]
有的人认为
*p++的作用是先使p加1, 即指向第一个元素
a[1]处,
然后输出第1个元素
a[0]的值3.
其实不然,
由于++的优先级高于*因此先执行
p++, 而
p++的作用是先用p的原值进行运算(进行*p的运算)
,然后再使p加1.
结论是先输出a[0]的值,然后在使p加1. 如果是*(++p), 则先使p指向a[1],然后输出a[1]的值.
在使用++和--运算符时,一定要避免歧义性, 如无把握, 宁可多加括号.
如上面的*p++可改为*(p++).
以上内容:摘自C程序设计(第四版) -- p363
附加:
下面举个例子对比一下(*p)++
#include<stdio.h>
int main()
{
int a[5] = {1,2,3,4,5};
int *p = a;
(*p)++;
printf("%d\n", (*p)++);
return 0;
}
[/code]
运行结果:2
相关文章推荐
- 使用JNDI的一个容易忽略的错误
- 使用blendtrans滤镜转换文字时容易出的错误,或者不能问题
- oauth认证中容易被错误使用而导致的漏洞
- STL 各种容器排序和查找算法对运算符的使用及特别注意运算符重载错误
- 关于出现“使用 UNION、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式”错误的可能原因
- 使用makefile和不使用makefile时,容易犯的一个错误。
- Error:(54, 61) 错误: -source 1.6 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)
- 使用BlazeDS与java类进行通信时容易报的错误
- 使用GCD的时候容易犯的小错误总结
- 错误: -source 1.6 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)
- C语言指针一种容易错误使用的方法
- 发现一个自己容易忽视的错误。空格+checkBOX 使用JS加载下来列表
- PICC使用中初学者容易犯得两个错误
- php容易被错误使用的empty函数
- 使用引用容易犯的错误
- 使用JNDI的一个容易忽略的错误
- C++ 菜鸟使用默认构造函数容易出现的错误
- Java 使用内部类时候的容易产生的错误
- 错误: -source 1.6 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)
- 错误: -source 1.6 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)