运算符*和++都属于单目运算符,两者的优先级是一样的,结合性的方向是从右到左。
首先,关于++运算符的特性,我们需要了解一下。 ++在前,则变量先自身加1,然后参与所在表达式的其它运算; ++在后,则变量首先参与所在表达式的运算,然后在当前语句最后结束前(以分号作为结束标志)自身加1。 见下例:
/代码1 int p=5; int i; i=p++;//此处,i的值为5,p的值还是5 printf("i=%d,p=%d\n",i,p);//此处,i的值为5,p的值已经变为6 /代码2 int p=5; int i; i=++p;//此处,p的值首先加1变为6,然后赋值给i printf("i=%d,p=%d\n",i,p);//此处,i的值为6,p的值为6然后我们分析一下几种情况:
因为文章开头提过,运算符*和++都属于单目运算符,两者的优先级是一样的,结合性的方向是从右到左。 然后有些人会认为这个表达式的运算顺序是:p先自身+1,然后进行解引用。其实这种想法是错误的。 正确的运算顺序应该是首先解引用指针变量p,然后p在自身加1。 之所以不按照从右向左的结合性,是因为++自身的特性引起的,我们在前面已经讲过。
*++p的运算顺序就是首先p自身加1,然后对p进行解引用。