C语言中的指针
指针中相对复杂的主要有三类情况:指针数组、数组指针和函数指针,以及三者相互嵌套的情况。弄清楚C中各类符号的运算优先级才能真正理解其含义。
C语言运算符号优先级
优先级 | 运算符 | 结合律 |
---|---|---|
1 | 后缀运算符:[],(),.,->,++,-- | 从左到右 |
2 | 一元运算符:++,--,!,~,+,-,*,&,size_of | 从右到左 |
3 | 类型转换运算:(int) | 从右到左 |
4 | 乘除运算符:*,/,% | 从左到右 |
5 | 加减运算符:+,- | 从左到右 |
6 | 移位运算符:<<,>> | 从左到右 |
7 | 关系运算符:<,<=,>,>= | 从左到右 |
8 | 相等运算符:==,!= | 从左到右 |
9 | 位与运算符:& | 从左到右 |
10 | 位异或运算符:^ | 从左到右 |
11 | 位或运算符:| | 从左到右 |
12 | 逻辑与运算符:&& | 从左到右 |
13 | 逻辑或运算符:|| | 从左到右 |
14 | 条件运算符:?: | 从右到左 |
15 | 赋值运算符:=,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>= | 从右到左 |
16 | 逗号运算符:, | 从左到右 |
运算符优先级和结合律
c
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
[]运算级比*高