• 技术文章 >后端开发 >C#.Net教程

    *p++和(*p)++的区别是什么

    醉折花枝作酒筹醉折花枝作酒筹2021-07-09 11:47:22原创8999

    “*p++”和“(*p)++”的区别是:1、“*p++”示取p所指单元的值,p指向下一单元,即p自加1。“*p++”是指下一个地址。2、“(*p)++”是指将*p所指的数据的值加一。

    本教程操作环境:windows7系统、C++17版本、Dell G3电脑。

    区别:

    1、*p++示取p所指单元的值,p指向下一单元,即p自加1。*p++是指下一个地址。

    2、(*p)++是指将*p所指的数据的值加一。

    C编译器认为*和++是同优先级操作符,且都是从右至左结合的,所以*p++中的++只作用在p上,和*(p++)意思一样;在(*p)++中,由于()的优先级比*和++都高,所以++作用在()内的表达式*p上。

    比如有:

    int x,y,a[]={1,2,3,4,5},*p=a,*q=a;

    x=*p++;//执行这一句后x=a[0]=1,p=a+1

    y=(*q)++;//执行这一句后,y=a[0]+1=2,q仍然=a

    扩展资料:

    验证程序1

    #include"stdio.h"
    void main()
    {
    int a=2;
    int*p=&a;
    int*pold;//记录P指向的地址,为了作为比较使用
    pold=p;
    //-----------原来的信息
    printf("原来的a=%d",a);
    printf("原来的p=%x",p);
    printf("原来的pold=%x",pold);
    //----------进行变化
    printf("*p++的结果=%d,a的结果a=%d",*p++,a);
    printf("地址变化的结果p-pold=%x",p-pold);
    }

    程序2

    #include"stdio.h"
    void main()
    {
    int a=2,*p=&a,*q=&a;
    printf("%d%d",(*p),a);
    printf("%d%d%d%d",(*p)++,*p++,*q++,a);
    printf("%d",a);
    }

    程序3:

    #include"stdio.h"
    void main()
    {
    int a=2,*p=&a,*q=&a;
    printf("%d%d",(*p),a);
    printf("%d%d%d",*p++,(*p)++,*q++);
    p=&a;q=&a;
    printf("%d%d%d%d",a,*p,(*q)++,a);
    printf("%d%d%d%d",a,++(*p),++(*q),a);
    printf("%d",a);
    }

    综上所述:

    *p++是先取出*p的值,然后让p++

    (*p)++是先取出*p的值,让这个值++

    *(P++)是先取出*p的值,让p++

    所以,*p++等价于*(P++)

    而且printf的运行顺序是从右向左运行。而且右++是在整个运算表达式运算完才进行,而且右++的执行顺序是从左到右进行。而左++遇到变量就会立即增加变量的值。

    验证printf的运算顺序

    #include"stdio.h"
    void main()
    {
    int a=2;
    printf("a++=%d,++a=%d,a++=%d",a++,++a,a++);
    printf("a=%d",a);
    }

    推荐教程:《C#

    以上就是*p++和(*p)++的区别是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:*p++ (*p)++
    上一篇:c++文件怎么进行读取和写入操作 下一篇:C语言中二维数组在内存中的存放顺序是什么

    相关文章推荐

    • c语言如何用scanf输入字符串• c语言开根号代码是什么• 如何使用VSCode配置C语言环境• c语言怎么求字符串的长度并输出• css是c语言吗

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网