*p++与(*p)++与*(p++)

转载 2016年06月01日 20:25:21

http://blog.csdn.net/niuyongjie/article/details/2490869

这个问题其实是论述*P++等价于(*p)++还是等价于*(p++)的问题,为了验证这个问题,我编写了下面的小程序(vc++6.0编译环境),作为验证
程序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;
    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("a的结果a=%d ",a);
    printf("地址变化的结果p-pold=%x ",p-pold);
}
运行结果
程序3
#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("a=%d,(*p)++的结果=%d,a的结果a=%d ",a,(*p)++,a);
    printf("a的结果a=%d ",a);
    printf("地址变化的结果p-pold=%x ",p-pold);
}
运行结果:
程序4
#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("a的结果a=%d ",a);
    printf("地址变化的结果p-pold=%x ",p-pold);
}
运行结果:
程序5
#include "stdio.h"
void main()
{
    int a=2,*p=&a,*q=&a;
    printf("%d %d  ",(*p),a);
    printf("%d %d %d ",*p++,(*p)++,*q++);
    printf("%d ",a); 
}

运行结果

程序6

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

运行结果:

程序7:

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

运行结果:

程序8:

#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);
}
运行结果:
剩下的工作就是你自己慢慢体会了。

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

测试的代码如下: #include "stdafx.h" #include "stdio.h" #include int _tmain(int argc, _TCHAR* argv[]) { in...
  • a904235765
  • a904235765
  • 2015年01月07日 15:49
  • 4319

*p++与(*p)++与*(p++)

这个问题其实是论述*P++等价于(*p)++还是等价于*(p++)的问题,为了验证这个问题,我编写了下面的小程序(vc++6.0编译环境),作为验证程序1#include "stdio.h"void ...
  • niuyongjie
  • niuyongjie
  • 2008年05月28日 16:12
  • 32702

说明一下++p 与 p++ 的区别。

假设这样的一个例子: “`c int p = -1; int y = 0; y = p++ + ++P;先分析一下它的汇编代码(没有优化): ```c subl $40, %esp ...
  • hyqsong
  • hyqsong
  • 2016年03月15日 22:59
  • 1306

*p++,(*p)++,*++p,++*p有什么不同

例如 int a[5]={1,2,3,4,5}; int *p = a; *p++ 先取指针p指向的值(数组第一个元素1),再将指针p自增1; cout ...
  • u011068702
  • u011068702
  • 2016年01月15日 22:11
  • 1647

关于*p++ *(p++) (*p)++ *++p *(++p) ++*p ++(*p)

最近刚复习完指针,刚好朋友问了我这几个表达式的含义*p++  *(p++)  (*p)++  *++p  *(++p)  ++*p   ++(*p)  就写了这段代码帮助理解  求指正! // zh...
  • qqMRG
  • qqMRG
  • 2014年03月31日 00:41
  • 397

古怪的C++语法*p++=*q++

今天在“待字闺中”看到了一条C++语句:*p++=*q++; 1 分析 (1)*q++: 后置自增操作符++(优先级为1),优先级要高于解析引用操作符(优先级为2)。 先将q值取出(此时为V1),然...
  • Erli11
  • Erli11
  • 2014年02月14日 18:17
  • 3776

*p++与(*p)++与*(p++

*p++与(*p)++与*(p++   这个问题其实是论述*P++等价于(*p)++还是等价于*(p++)的问题,为了验证这个问题,我编写了下面的小程序(vc++6.0编译环境),作为验...
  • hopedengxiwang
  • hopedengxiwang
  • 2011年11月07日 16:41
  • 486

c语言操作运算符的优先级,*p++,++*p,++*p++的结果

对于结果我目前也没分析到位,望读者留言分析一下。
  • fendoubasaonian
  • fendoubasaonian
  • 2015年11月03日 11:04
  • 1645

c语言 *p++与(*p)++、*(p++)三者异同?

1.*p++与*(p++)是等价的,表示取p所指单元的值,p指向下一单元,即p自加1。 2.(*p)++表示取p所指单元的值,这个单元的值自加1。 大家可以写个小程序自测一下。...
  • u012973218
  • u012973218
  • 2016年01月27日 14:27
  • 268

C语言指针的*p++ ,*p(++), (*p)++,*++p的使用

C语言的特点之一是代码可以写的很精炼但对初学者来说不容易理解,因此弄清楚一些写的很难懂的代码段就对我们学习c语言尤为重要了(写在前面)                              ...
  • BiuBiu741
  • BiuBiu741
  • 2016年11月25日 22:36
  • 2055
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:*p++与(*p)++与*(p++)
举报原因:
原因补充:

(最多只允许输入30个字)