C语言 *p++和*++p的区别

#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
    int a[]={1,3};
    int *p=&a[0];
    cout<<"*p++="<<*p++<<endl;  
    p=&a[0];
    cout<<"*++p="<<*++p<<endl;
    p=&a[0];
    cout<<"*(p++)="<<*(p++)<<endl;
    cout<<"执行(p++)后,*p="<<*p<<endl;
    p=&a[0];
    cout<<"(*p)++="<<(*p)++<<endl;
    cout<<"执行(*p)++后,*p="<<*p<<endl;
    system("pause");
    return 0;
}

 

*p++和*++p的区别:

 *p++由于*和++优先级同级,满足右结合性,从右至左。先执行p++,因为此时语句还没执行完,p的值未被修改,所以*p++所取的值为a[0]=1,*p++等同于*(p++);

 ++与同*优先级同级,从右向左结合。*++p则等同于++p,*p。++p是先取p的值再加一,在本条语句未执行完的时候,p的值已经被改变了,再取指针p指向的内容,*++p结果是a[1]=3。

*(p++)和(*p)++的区别

 *(p++)等同于*p++,结果是a[0]=1,(*p)++先取指针p指向的内容再将该内容加一,但在本条语句中(*p)++的结果与*(p++)打印结果相同。

结果:

 

作者:qianxiaohan

出处:https://www.cnblogs.com/qianxiaohan/p/15180153.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @ 2021-08-24 14:25  记录学习的Lyx  阅读(3891)  评论(0编辑  收藏  举报
more_horiz
keyboard_arrow_up light_mode palette
选择主题