呵呵,这是c语言运算符优先的问题
1、()的级别最高。
2、*,++都是单目运算。级别是一样的。同级别的是从右往左结合的。
3、p++表示把p先用,后把p+1
++p表示先把p加1,然后用p
实例代码:
#include "stdio.h"
#include "conio.h"
main()
{
char a[5]={'a','b','c','d','e'};
char *p=&a[0];
printf("%c\n",*(p++));
printf("%c\n",*(++p));
getch();
}
输出:
a
c
分析:p指针开始指向数组第一个元素。所以
*(p++)是指的第一个元素。然后p=p+1 所以p现在指向b
*(++p) 表示先把p+1,所以p现在指向c了。然后用打印就可以了。
楼主好运!
举例来说最好理解了。比方说,P的初始值是a(即&a[0])。*(P++)就是a[0],并且P加1,意思是先取*P的地址,再让P加1。后者则是先让P加1,再取*P,即后者=a[1]。这也主要是先加1和后加1的问题,跟i++和++i很相似。
*(p++)
先取*p的值 , 再p++
*(++p)
先p++,再取*p的值
设有char s[]="ABCD",*p=s;
则*(p++)值为 'A',然后p指向'B'
而*(++p)则值为'B',结束后p指向'B'
这个跟 i++ 和++i 一个道理
例如 *(p++) = 1; 和 *(++p)=1 区别就是
前者 赋值为1后才后移的 而后者是 先后移然后才赋值为1
如果在赋值之前 *p指向的是第一个元素(下标为0)的话 那么 前者是给第一个元素赋值为1
而后者是给第二个元素(下标为1)赋值为1
例1.int p=10;
p++;
cout<<"p="<
++p;
cout<<"p="<
例2. int p=10,b=0;
b=a++;
cout<<"b="<p=10;
b=++a;
cout<<"b="<表达式b=p++的运算过程为:先将p赋值给变量b,然后将p的值增加1.
表达式b=++p的运算过程为:先将p值增加1,然后将p的值赋给b.