C语言的运算优先顺序

来源:百度知道 编辑:UC知道 时间:2024/05/29 23:43:15
int *P;
*p=1;
*p++;
printf("%d\n",*p);

结果显示的数据惊天地,泣鬼神

而如果改为
int *P;
*p=1;
(*p)++;
printf("%d\n",*p);

显示结果2

难道在*p++这一句中,是++优先然后再*吗?变成是将p的地址后移1,然后再对那个地址取值,是这样吗?

你分析得没错。
具体优先顺序可以参考C语言教材。说实在的,我也经常搞不清楚,所以就多加括号呗。

c语言运算符号

1级优先级 左结合
() 圆括号
[] 下标运算符
-> 指向结构体成员运算符
. 结构体成员运算符

2级优先级 右结合
! 逻辑非运算符
~ 按位取反运算符
++ 自增运算符
-- 自减运算符
- 负号运算符
(类型) 类型转换运算符
* 指针运算符
& 地址与运算符
sizeof 长度运算符

3级优先级 左结合
* 乘法运算符
/ 除法运算符
% 取余运算符

4级优先级 左结合
+ 加法运算符
- 减法运算符

5级优先级 左结合
<< 左移运算符
>> 右移运算符

6级优先级 左结合
<、<=、>、>= 关系运算符

7级优先级 左结合
== 等于运算符
!= 不等于运算符

8级优先级 左结合
& 按位与运算符

9级优先级 左结合
^ 按位异或运算符

10级优先级 左结合
| 按位或运算符

11级优先级 左结合
&& 逻辑与运算符

12级优先级 左结合
|| 逻辑或运算符

13级优先级 右结合
? : 条件运算符

14级优先级 右结合
= += -= *= /= %= &= ^= |= <<= >>= 全为赋值运算符

15级优先级 左结合
, 逗号运算符

对,是把指针向后推1,你的理解是对的