标题:函数问题
只看楼主
独孤剑魔
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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-232938-1-1.html




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

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