本文主要是介绍《c和指针》笔记--表达式作为左值或右值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
下面的代码,大家猜下结果分别是多少?
#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和指针》笔记--表达式作为左值或右值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!