免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 5604 | 回复: 39
打印 上一主题 下一主题

[函数] 为什么我的指针函数返回的值不对? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-28 17:28 |只看该作者 |倒序浏览
源代码:
#include <iostream.h>;

int *getP(int a)
{
        int *p=&a
        cout<<"p:"<<p<<endl;
        cout<<"*p:"<<*p<<endl<<endl;
        return p;
}

void main()
{
        int *p_int=0;

        p_int=getP(100);
        cout<<"p_int:"<<p_int<<endl;
        cout<<"*p_int:"<<*p_int<<endl;
}



运行结果:
p:0x0012FF2C
*p:100

p_int:0x0012FF2C
*p_int:4198415


为什么p和p_int一样,*p_int的值是4198415而不是100?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-12-28 17:45 |只看该作者

为什么我的指针函数返回的值不对?

int *p=&a ;
a是个形参,函数结束就释放了

论坛徽章:
0
3 [报告]
发表于 2004-12-28 19:30 |只看该作者

为什么我的指针函数返回的值不对?

p的地址在这里相同可能是一种巧合,就算地址一样,它的内容也不一样,a是实参的一个考贝,这个考贝的地址是随时可能改变的。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-12-28 19:36 |只看该作者

为什么我的指针函数返回的值不对?

错!地址不会变,但内容会变掉

论坛徽章:
0
5 [报告]
发表于 2004-12-28 19:44 |只看该作者

为什么我的指针函数返回的值不对?

地址相同不是巧合

论坛徽章:
0
6 [报告]
发表于 2004-12-28 19:47 |只看该作者

为什么我的指针函数返回的值不对?

getP(100),100是随机给定的,这部分内存可能会被修改,建议不要给随机数,用变量替换。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-12-28 20:29 |只看该作者

为什么我的指针函数返回的值不对?

[quote]原帖由 "killam"]getP(100),100是随机给定的,这部分内存可能会被修改,建议不要给随机数,用变量替换。[/quote 发表:

不明白!用变量有什么不同?

论坛徽章:
0
8 [报告]
发表于 2004-12-28 20:45 |只看该作者

为什么我的指针函数返回的值不对?

函数里指针所指的是变量 int *p=&a  其作用域从函数开始到函数结束
return p;返回的是指针所指的首地址,所以p和p_int的值一样,而函数结束p所指的地址所存的值会被释放,所以*p和*p_int的值不一样

论坛徽章:
0
9 [报告]
发表于 2004-12-29 09:54 |只看该作者

为什么我的指针函数返回的值不对?

每次运行两个地址都是一样的,我相信不是巧合。我修改以后就是对的了
#include <iostream.h>;

int *getP(int &a)
{
        int *p=&a;
        cout<<"p:"<<p<<endl;
        cout<<"*p:"<<*p<<endl<<endl;
        return p;
}


void main()
{
        int *p_int=0;
        int n=100;

        p_int=getP(n);
        cout<<"p_int:"<<p_int<<endl;
        cout<<"*p_int:"<<*p_int<<endl;
}



但是还有一个问题,变量a是从main函数传递进来的所以没错,可是如果这个变量或者对象是在int *getP(int &a)中定义的,又如何返回它的指针而且可以正确的获得对象呢?如下:

#include <iostream.h>;

int *getP()
{
        int a=100;
        int *p=&a;
       
        cout<<"p:"<<p<<endl;
        cout<<"*p:"<<*p<<endl<<endl;
        return p;
}


void main()
{
        int *p_int=0;

        p_int=getP();
        cout<<"p_int:"<<p_int<<endl;
        cout<<"*p_int:"<<*p_int<<endl;
}

论坛徽章:
0
10 [报告]
发表于 2004-12-29 10:02 |只看该作者

为什么我的指针函数返回的值不对?

原帖由 "flyszh" 发表:
每次运行两个地址都是一样的,我相信不是巧合。我修改以后就是对的了
#include <iostream.h>;

int *getP(int &a)
{
        int *p=&
        cout<<"p:"<<p<<endl;
        cout<<"*p:"<<..........


老大,你传引用当然没有问题了.和你最开始问的那个有很大的区别诶.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP