| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 558 人关注过本帖
标题:*p++的疑问与*(p++)
只看楼主 加入收藏
yusuiyunqu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-5-7
收藏
 问题点数:0 回复次数:5 
*p++的疑问与*(p++)
#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);


程序运行的结果如下
图片附件: 游客没有浏览图片的权限,请 登录注册

 

我对第十四行的结果存在疑问:1 按照printf( )函数从右到左的运算方式,那么结果应该是 a=3,( *p)++=2,a=2;
第十五行的结果应该为 a=3;
我把(*p)++ 换成a,结果如下
图片附件: 游客没有浏览图片的权限,请 登录注册

 
请问这是为什么,盼望赐教 我在线等待!!谢谢!!!




搜索更多相关主题的帖子: 疑问 
2009-09-29 14:06
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
#include "stdio.h"
void main()
{
    int a=2;
    printf("%d %d %d\n",a,a++,a);
     
     
}
运行结果为 3 2 2
2009-09-29 14:22
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
你的运行结果不对。
2009-09-29 15:23
yusuiyunqu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-5-7
收藏
得分:0 
关于以上的问题  我又重新编译了一下,结果正确。请大家在看看这个精编的程序。不过还有点问题。

#include "stdio.h"
void main()
{
 int a=2,*p=&a;
 int pold=p;
 printf("a=%d,p=%x,pold=%x\n",a,p,pold);
 printf("a=%d,(*p)++=%d,a=%d\n",a,(*p)++,a);
 printf("p-pold=%d\n",p-pold);
}
结果如下
图片附件: 游客没有浏览图片的权限,请 登录注册

#include "stdio.h"
void main()
{
 int a=2,*p=&a;
 int pold=p;
 printf("a=%d,p=%x,pold=%x\n",a,p,pold);
 printf("a=%d,a++=%d,a=%d\n",a,a++,a);
printf("p-pold=%d\n",p-pold);
}
结果如下:
图片附件: 游客没有浏览图片的权限,请 登录注册

这次正确了,和我预想的一样。只是最后 p-pold的值与预期不一样。

请一楼 二楼 的指正下。谢谢大家了  尤其是一楼和二楼的朋友。
还有 请你们给介绍点C语言内存管理方面的书籍吧  最好能在网上下载的。
再一次 谢谢了
2009-09-29 15:37
liu1987lang
Rank: 2
等 级:论坛游民
帖 子:42
专家分:44
注 册:2007-4-22
收藏
得分:0 
(*p)++就相当于a++,p的值没有发生变化,你对*p操作实际上就是对a操作。你第一次的运行结果也有问题。
应该是2,2,2,3,0
2009-09-29 15:44
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
#include "stdio.h"
void main()
{
int a=2,*p=&a;
int *pold;
pold=p;
printf("a=%d,p=%x,pold=%x\n",a,p,pold);
printf("a=%d,a++=%d,a=%d\n",a,a++,a);
printf("p-pold=%d\n",p-pold);
}
关于C语言内存管理的资料,在论坛里搜搜吧。
2009-09-29 15:50
快速回复:*p++的疑问与*(p++)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026881 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved