前自增操作符,前自减操作符,以及解引用操作符,具有相同的优先级,使用从右往左结合。
p=&a[2]; p指向了数值a中第2个元素(从0开始计数),即3存放的那个位置
对于printf("%d ",++*p); 是先对p解引用,然后对其进行自加操作,相当于*p+=1;操作完成之后,3变成了4,输出之
printf("%d\n",*--p);是先指向p的自减操作,即p的指向从a[2]变成了a[1],然后解引用得到a[1]的数值2,输出之。
结果为 4 2
++和*同优先级,结合方向自右向左.++(*p)表示p所指向的值加1. *(++p)表示P先自加,再进行*运算。尝试错误,观察各种各样的错误后果是我们学习的一部分,但代码规范也是必须的,不要盲目尝试,特别是指针这一块,很容易在我们不知情的情况下改了内存的一些内容,埋下隐患,所以建议按照安全的代码语句来写
#include
void main()
{
int a[4] = {1,2,3,4};
int *p;
p=&a[2];
printf("%d ",++*p);//先运算*p;等于++(*p),输出4
printf("%d\n",*--p);//先运算--p即p的地址减1,等于*(--p),输出2
}
执行结果是4 2
代码都没写全呢 怎么看呀