C语言中 ++和 *的优先级以及他们的应用实例(*p++、*++p、++*p、(*p)++)

一、在此说明 按照书上的说法++ (后置) >++(前置) >* 解引用用 > = 等于

所以说明++的优先级是高于*指针

二、实列代码演示

#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;

如果对其中还有不懂得,可以看下这个网址所讲得。链接如下
点赞、收藏

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rose_yj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值