注册 登录
编程论坛 C++教室

函数问题

独孤剑魔 发布于 2008-09-12 19:03, 440 次点击
没事闲得无聊,偶感想起的。
#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
本来无聊测试着玩,没想到竟然遇到问题了,函数返回的值为什么没有按我所想的那样输出出来呢???
4 回复
#2
bibingyan2008-09-12 19:14
因为int* ret(int i)中的i是按值传递的,相当于一个系统自己创建的一个临时变量,所以它的地址是不定的,当退出函数时 已经释放,可以改成传一个引用或是地址。
#3
独孤剑魔2008-09-12 19:19
那该如何改呢?
#4
lonmaor2008-09-12 19:47
i传递入ret()后,此i非彼i也。

换成引用形参即可:
int* ret(int &i);
#5
zzt_4282008-09-18 15:16
回复
因为i是按值传递的,,函数得到的是i的一个副本,不是本身.
如果按引用传递的话,就能会按照你的意思输出了
把int* ret(int i)
改成
int *ret(int &i)
{
   //....
}
1