运算符号

来源:互联网 发布:入骨相思知不知txt微盘 编辑:程序博客网 时间:2024/04/30 08:59

说实话,学编程有三四年了,对于运算符的问题还是一知半解的,表示非常悲剧;
今天又把这个东西拿出来总结一下:
运算符有两个特性,即优先级和结合性,应用场合也有两个:运算时和定义时;
运算时:

对于一个表达式,我们首先找出优先级高的运算符(b=a++,找出++),然后找出可以左右连接的同级运
算符放在一组(b=a*b*c+d*e,把前面两个*放在一组,后面一组),之后根据结合性进行计算:例如
b=a*b*c+d*e,先分为a*b*c和d*e两组,根据结合性,计算a*b,在*c;对于a=b=c;就需要从后面向前计
算了,因为=的结合性从右向左;这一级别算完了,进入下一级别;
定义时:

解析一些重要的例子,加深一下理解:
int (*p)():此为定义一个函数指针,p与*结合,再与后面的()结合
int *p();仅仅声明一个函数;因为p与()结合,使p变成函数名,int *为函数返回值;
int *p[] :[]优先级大于*,所以p是指针数组
int (*p)[]:为数组指针
我也突然意识到一个问题:()的存在只是为了提高优先级么?以前我一直这样认为,最近发现自己错
了,在某些时候,它也是起结合性的作用:int *(*p)(),在这个例子中,后面的括号就是起到结合性的
作用,是指针P变为函数指针P;还有 *;在运算的时候,它可以取指针指向的数据,在定义的时候,它
就是纯粹与变量结合,达到改变变量属性的作用;例如 :int **p;
还有++运算符返回的值为const类型,不能参与自身的运算:例如++p++是错误的;