Korbin
Korbin
发布于 2021-01-30 / 14 阅读
0
0

C语言中的指针

指针中相对复杂的主要有三类情况:指针数组、数组指针和函数指针,以及三者相互嵌套的情况。弄清楚C中各类符号的运算优先级才能真正理解其含义。

C语言运算符号优先级

优先级

运算符

结合律

1

后缀运算符:[],(),.,->,++,--

从左到右

2

一元运算符:++,--,!,~,+,-,*,&,size_of

从右到左

3

类型转换运算:(int)

从右到左

4

乘除运算符:*,/,%

从左到右

5

加减运算符:+,-

从左到右

6

移位运算符:<<,>>

从左到右

7

关系运算符:<,<=,>,>=

从左到右

8

相等运算符:==,!=

从左到右

9

位与运算符:&

从左到右

10

位异或运算符:^

从左到右

11

位或运算符:|

从左到右

12

逻辑与运算符:&&

从左到右

13

逻辑或运算符:||

从左到右

14

条件运算符:?:

从右到左

15

赋值运算符:=,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>=

从右到左

16

逗号运算符:,

从左到右

运算符优先级和结合律

int *p[3];
// [],*,int:数组,里面是指针,指向int
int (*p)[3];
// *,[],int:指针,指向数组,数组中是int
int (*p)(int a);
// *,(int a),int:指针,指向参数为(int a)的函数,函数返回int
int (*p[3])(int a);
// [],*,(int a),int:数组,数组中是指针,指向参数为(int a)的函数,函数返回int
int(*(*p())[])();
// (),*,[],*,(),int:无参函数,返回一个指针,指向一个数组,数组中是指针,指向一个无参函数,函数返回int

[]运算级比*高

参考

  1. C语言运算符优先级

  2. C语言总结

  3. C复杂指针


评论