浅谈指针(二)——操作符与表达式

1.左值和右值

左值就是那些能够出现在赋值符号左边的东西。右值就是那些出现在赋值符号右边的东西。左值标识了一个可以存储结果值的地点,因为它指定了一个值。

2.表达式求值

(1)隐式类型转换

算术运算总是至少缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符型和短型号操作数在使用之前被转换为普通整型,这种转换称为整型提升。

(2)算术转换

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数转换为另外一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换。如果某个操作数属于不同的类型在上面列表总排名较低,那么它首先将转换为另一个操作数的类型然后执行操作。

复杂的表达式的求值顺序是由3个因素决定的:操作符的优先级、操作符的结合性以及操作符是否控制执行的顺序。两个相邻的操作符哪个先执行取决于它们的优先级,如果两者的优先级相同,那么它们的执行顺序由它们的结合性决定,简单地说,结合性就是一串操作符是从左向右依次执行还是从右到左逐个执行。最后,有4个操作符,它们可以对整个表达式的求值顺序施加控制,它们可以对整个表达式的求值顺序施加控制,它们或者保证某个子表达式能够在另一个子表达式的所有求值过程完成之前进行求值,或者可能使某个表达式被完全跳过不在求值。

两个相邻操作符的执行顺序由它们的优先级决定,如果优先级相同,则执行顺序由结合性。

操作符描述用法示例结合性是否控制求值顺序
()聚组(epx)N/A
()函数调用exp(exp)L-R
[]下标引用exp[exp]L-R
.访问结构成员exp_number.expL-R
->访问结构指针成员exp_number->expL-R
++后缀自增exp++L-R
--后缀自减exp--L-R
逻辑反!expR-L
~按位取反~expR-L
+单目,表示正值+expR-L
-单目,表示负值-expR-L
++前缀自增++expR-L
--前缀自减--expR-L
*间接访问*expR-L
&取地址&expR-L
sizeof取其长度,以字节表示sizeof(exp)R-L
(类型)类型转换(类型)expR-L
*乘法exp*expL-R
/除法exp/expL-R
%整数取余exp%expL-R
+加法exp+expL-R
-减法exp-expL-R
<<左移位exp<<expL-R
>>右位移exp>>expL-R
>大于exp>expL-R
>=大于等于exp>=expL-R
<小于exp<expL-R
<=小于等于exp<=expL-R
==等于exp==expL-R
!=不等于exp!=expL-R
&逻辑与exp&expL-R
|逻辑或exp|expL-R
^位异或exp^expL-R
&&逻辑与exp&&expL-R
||逻辑与exp||expL-R
?:条件操作符exp?exp:expN/A
=赋值exp=expR-L
+=以……加exp+=expR-L
-=以……减exp-=expR-L
*=以……乘exp*=expR-L
/=以……除exp/=expR-L
%=以……取模exp%=expR-L
<<=以……左移exp<<=expR-L
>>=以……右移exp>>=expR-L
&=以……与exp&=expR-L
^=以……异或exp^=expR-L
!=以……或exp!=expR-L
逗号exp,expL-R
     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值