| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 927 人关注过本帖
标题:c++指针问题
只看楼主 加入收藏
风雨123
Rank: 2
等 级:论坛游民
帖 子:84
专家分:65
注 册:2013-2-23
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:20 
c++指针问题
#include <iostream>
using namespace std;
void prt(int*x,int *y,int *z)
{   
    cout<<++*x<<","<<++*y<<","<<*(z++)<<endl;
   
}
int a=10,b=40,c=20;
void main()
{
    prt(&a,&b,&c);
    prt(&a,&b,&c);
}
结果为 11,41,20;  
       12,42,20;
为什么*(z++)的值不变???为什么20;求各位帮忙。
搜索更多相关主题的帖子: namespace void include namespace void include 
2013-03-06 10:50
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
又是前++  后++的经典问题哈

DO IT YOURSELF !
2013-03-06 10:52
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
收藏
得分:15 
问题就出在表达式*(z++):
第一次调用prt(&a,&b,&c);传的是a,b,c地址的拷贝,
cout<<++*x;和cout<<++*y;实际是对变量a和b进行操作,相当于++a,和++b,因此a和b的输出结果各自增加1不难理解。
但cout<<*(z++),是对c的地址进行后自增,等价于cout<<*z;z=z+1;,因此输出的还是c的值,然后对c地址的拷贝自增一次,实际上对c的值以及c的地址都没有任何影响;

因此当第二次调用prt()时,a和b的值照旧自增一次,c依然是原来那个c,c的地址也没有任何改变!
2013-03-06 11:10
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:1 
以下是引用Pirelo在2013-3-6 11:10:14的发言:

问题就出在表达式*(z++):
第一次调用prt(&a,&b,&c);传的是a,b,c地址的拷贝,
cout<<++*x;和cout<<++*y;实际是对变量a和b进行操作,相当于++a,和++b,因此a和b的输出结果各自增加1不难理解。
但cout<<*(z++),是对c的地址进行后自增,等价于cout<<*z;z=z+1;,因此输出的还是c的值,然后对c地址的拷贝自增一次,实际上对c的值以及c的地址都没有任何影响;
 
因此当第二次调用prt()时,a和b的值照旧自增一次,c依然是原来那个c,c的地址也没有任何改变!
不错,好好品味

Maybe
2013-03-06 11:24
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:2 
这种问题,考试倒是很喜欢用,一般工作上没有谁会写的那么蛋疼

最多就是一行单独的 i++ 的

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-03-06 12:02
qq372505855
Rank: 2
等 级:论坛游民
帖 子:42
专家分:46
注 册:2012-6-20
收藏
得分:2 
回复 3楼 Pirelo
*(z++)
z还是指向变量c?而且输出c的值?z不是自加了吗?求解释
2013-03-06 20:40
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
收藏
得分:0 
回复 6楼 qq372505855
在每次调用prt()时,指针z确实指向c,因此输出了c的值,而后指针z也自增1,但是有两点需要搞明白:
1> 指针z自增1后,请问它指向什么地方?反正不再指向c了,对吧?
2> 指针z只是函数prt()内部的局部变量,当调用prt()时,仅仅是把c的地址拷贝一份复制给了指针z:z = &c,当每次调用结束后,无论指针z指向谁,作为局部变量的它都会在函数调用结束时消失,因此无论多少次调用prt(&a,&b,&c);但每次输出的必定是c原来的值
2013-03-08 09:57
小菜B
Rank: 2
等 级:论坛游民
帖 子:29
专家分:25
注 册:2013-3-6
收藏
得分:0 
不知道跟不跟静态变量有没有关系
2013-03-08 11:30
qq372505855
Rank: 2
等 级:论坛游民
帖 子:42
专家分:46
注 册:2012-6-20
收藏
得分:0 
回复 7楼 Pirelo
*(z++)
这里难道不是z自加以后显示值吗?为什么会变成显示值后再自加呢?
2013-03-10 13:56
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
围观。。。
2013-03-10 14:13
快速回复:c++指针问题
数据加载中...
 
   



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

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