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,然后再对那个地址取值,是这样吗?
*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,你的理解是对的