一、在此说明 按照书上的说法++ (后置) >++(前置) >* 解引用用 > = 等于
所以说明++的优先级是高于*指针
二、实列代码演示
#include<stdio.h>
int main()
{
//在此说明 按照书上的说法++ (后置) >++(前置) >* 解引用用 > = 等于,但是
//c = ++*p为什么先算的 *p 后算的++ 可以看最后我给的网址
char buf[] = "acegfd";
char a,b,c,d;
// printf("a=%d--b=%d--c=%d--d=%d\n", &a, &b, &c, &d);//打印asdasf
char* p = buf;
printf("p的原地址 = %d\n", p); //打印11533088--a 说明一下:指针的地址是随时改变的。
a = *p++; //a=*(p++)
printf("p-a的地址 = %d\n", p); //打印 11533089--c
printf("a = %c\n", a);//打印a
b = *++p; //b=*(++p)
printf("p-b的地址 = %d\n", p); //打印11533090--e
printf("b = %c\n", b); //打印e
c = ++*p; //c=++(*p)
printf("p-c的地址 = %d\n", p); //打印11533090--e
printf("c = %c\n", c); //打印f
d = (*p)++; //d=(*p)++
printf("p-d的地址 = %d\n", p); //打印11533090--e
printf("d = %c\n", d); //打印f
return 0;
}
结果展示
解释:
a=*(p++) a过后 p的地址+1 故p的地址为11533089 —c, 但由于p++是先运行后自加故 a = a .并没有去指向p现有的地址,而是指向了P的原有地址。
b=*(++p) b过后p的地址+1 故p的地址为11533090----e, 故b就指向p的值-e
c=++(*p) c过后 p的地址没变 故p的地址为11533090 —e, 但由于(*p)=e,++自增了1,故c=e+1=f.
d = (*p)++; d过后 p的地址没变 故p的地址为11533090
—e,因为()的优先级最高,故(*p)=e,但是由于++,所以d=f;
如果对其中还有不懂得,可以看下这个网址所讲得。链接如下
点赞、收藏