《c和指针》笔记--表达式作为左值或右值
来源:互联网 发布:淘宝怎么加入淘客 编辑:程序博客网 时间:2024/06/06 00:22
下面的代码,大家猜下结果分别是多少?
#include <stdio.h>int main(void){ int i=1; int* cp = &i; printf("%d\n",++*cp++); return 0;}
#include <stdio.h>int main(void){ int i=1; int* cp = &i; printf("%d\n",++(*cp)++); return 0;}
答案:
第一个值是:2
第二个在编译时出现错误:
error: invalid lvalue in increment
分析:
++*cp++:
cp++执行后,不会影响当前表达式中cp的值,然后执行*cp,值是1,最后进行前自增(此时*cp++作为左值),结果为2.
++(*cp)++:
指针cp进行解引用,值是1,然后进行后自增,值不变,还是1,最后进行前自增,但是此时(*cp)++不能作为左值,因为(*cp)++是值的拷贝,不是变量(详细可以参考之前写过的一片文章:http://blog.csdn.net/todd911/article/details/8860960),所以编译器报错。
总结:
自增后不能作为左值进行操作,而解引用后可以作为左值进行操作。
- 《c和指针》笔记--表达式作为左值或右值
- 指针和数组(数组名a作为左值和右值的区别)
- 左值表达式 右值表达式(C/C++)
- C和指针(二)指针与左值、右值详解
- C语言左值和右值
- C++笔记:左值和右值
- 为什么c语言中赋值表达式左值和右值不能调换位置
- 左值和右值/auto ptr智能指针
- C指针右左法则
- C指针右左法则
- 左值和右值
- 左值和右值
- 左值和右值
- 左值和右值
- 左值和右值
- 左值和右值
- 左值和右值
- 左值和右值
- 如何提高学习效率?
- Silverlight实例教程 - Out of Browser在线更新和Silent安装
- 清除tomcat缓存
- ORA-32004:obsolete and/or deprecated parameter
- VC List Control 用法及技巧 总结1
- 《c和指针》笔记--表达式作为左值或右值
- ORA-3113错误就是说连接到数据库的网络中断了。
- UTF8--Unicode转换程序
- 后缀树与后缀数组
- iptables学习(针对filter链)
- EXP-00091 Exporting questionable statistics
- Silverlight 操作Excel 中的进程资源释放问题
- C++ 中string.find() 函数的用法总结
- HP-UX 11.31 安装RAC 添加共享磁盘的问题(两种办法)