| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 440 人关注过本帖
标题:函数问题
只看楼主 加入收藏
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏
 问题点数:0 回复次数:4 
函数问题
没事闲得无聊,偶感想起的。
#include<iostream.h>
int* ret(int i)
{
    int *p;
    p=&i;
    return p;
};
void main()
{
    int *h;
    int i=10;
    h=&i;
    cout<<*h<<"\t"<<h<<endl;
    int *p;
    p= ret(i);
    cout<<*p<<endl;
    cout<<p<<endl;
}
输出结果是:
10      0x0012FF78
4198415
0x0012FF24
Press any key to continue
本来无聊测试着玩,没想到竟然遇到问题了,函数返回的值为什么没有按我所想的那样输出出来呢???
搜索更多相关主题的帖子: 函数 
2008-09-12 19:03
bibingyan
Rank: 1
来 自:湖南长沙
等 级:新手上路
帖 子:123
专家分:0
注 册:2008-3-16
收藏
得分:0 
因为int* ret(int i)中的i是按值传递的,相当于一个系统自己创建的一个临时变量,所以它的地址是不定的,当退出函数时 已经释放,可以改成传一个引用或是地址。

不嫌恶地狱,不迷恋人间,不羡慕天堂。
2008-09-12 19:14
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏
得分:0 
那该如何改呢?
2008-09-12 19:19
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
i传递入ret()后,此i非彼i也。

换成引用形参即可:
int* ret(int &i);
2008-09-12 19:47
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
收藏
得分:0 
回复
因为i是按值传递的,,函数得到的是i的一个副本,不是本身.
如果按引用传递的话,就能会按照你的意思输出了
把int* ret(int i)
改成
int *ret(int &i)
{
   //....
}

学习切忌浮躁.
2008-09-18 15:16
快速回复:函数问题
数据加载中...
 
   



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

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