左值和右值

多说则错,小菜鸡粗略总结一下:
单目运算符的操作数大部分是左值,如&,sizeof。
赋值运算符的左边是左值,右边是右值。
左值是变量,但不是临时变量(应该讲临时对象,如a+b不需要一个变量名表示他),左值既能知道它的地址,也能改变它的值。已经声明的变量都是左值

int a=3,b=4;
5=a;	//常量不行
a+b=5;	//临时变量不行

&和*:

int a=3,b=4;
int *c=&a;
&(&c); //error:'&' requires l-value 说明&输入左值返回右值
*(&c); //可以 说明*接受右值输入
&(*c); //可以 说明*返回左值输出

数组名:
数组名在3种情况下是左值,
1.初始化的时候,如in a[5];
2.sizeof 的时候,就像伪代码sizeof(数组)一样,得到的是数组大小20个字节
3.&的时候,得到一个指向数组的指针
其他时候数组名退化成指针常量,指向数组的第一个元素。指针常量是右值,所以a++等操作是不行的。

常量一定不是左值吗:
按照我上面的说法是的,因为常量就算知道地址,也无法改变它的值。可惜我上面说的话有瑕疵。看代码:

int a=3const int d=9;
int f[4]={1,2,3,4};
d=5;
3=4;
f=&a;

d=5;
3=4;
f=&a;这3行都会报错,d、3、f他们也都是常量,但是报错的内容不一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值