| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 763 人关注过本帖
标题:一个指针的问题 不知是忘了还是什么 居然出错了
只看楼主 加入收藏
yuanhaitaozz
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-8-22
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:17 
一个指针的问题 不知是忘了还是什么 居然出错了
程序代码:
#include <stdio.h>     
void  fun(int *&x)
{
    int b=6666;
    x=&b;
    printf("xxxxxxxxxxxxxxxxx%p\n",x);
    printf("xxxxxxxxxxxxxxxxx%d\n",*x);
}
/*int *fun3()
{
    int v=6666;
    int *x=&v;
    printf("xxxxxxxxxxxxxxxxx%p\n",x);
    printf("xxxxxxxxxxxxxxxxx%d\n",*x);
    return x;
}*/
int main()
{
    int *p=NULL;
    printf("原p存放地址:%p\n",p);
    fun(p);
    if(p==NULL)
        printf("NO DATA!\n");
    else
    {
        printf("后p存放地址:%p\n",p);
        printf("%d\n",*p);
    }
    return 0;
}


这里借c++的引用用了一下   
问题是为什么p 和 x 的地址是一样的 输出的整型的数却不一样呢 我是哪里搞错了
2013-11-26 18:55
yuanhaitaozz
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-8-22
收藏
得分:0 
如果发现什么马虎错误了  还望指点一下  随便喷我。。。
一定虚心接受
2013-11-26 18:57
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:5 
应该都是6666啊?

mark,回寝室测试一下!


[fly]存在即是合理[/fly]
2013-11-26 19:12
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:5 
程序代码:
#include <stdio.h>    
void  fun(int *&x)//这是有错的,至少我的编译器是过不了的,应为*x
{
    int b=6666;
    x=&b;//x在函数调用时传过来的傎是p所指地址,这里被赋于b的地址,下面输出的是b的地址和b的值
    printf("xxxxxxxxxxxxxxxxx%p\n",x);
    printf("xxxxxxxxxxxxxxxxx%d\n",*x);
}
/*int *fun3()
{
    int v=6666;
    int *x=&v;
    printf("xxxxxxxxxxxxxxxxx%p\n",x);
    printf("xxxxxxxxxxxxxxxxx%d\n",*x);
    return x;
}*/
int main()
{
    int *p=NULL;
    printf("原p存放地址:%p\n",p);
    fun(p);//这里并没有改变p,p仍然是NULL
    if(p==NULL)
        printf("NO DATA!\n");
    else
    {
        printf("后p存放地址:%p\n",p);
        printf("%d\n",*p);
    }
    return 0;
}
2013-11-26 19:18
yuanhaitaozz
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-8-22
收藏
得分:0 
回复 4楼 heroinearth
呃 那个  请问是用的 .cpp后缀文件吗。。。那个指针的引用不该有错的啊
2013-11-26 19:31
yuanhaitaozz
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-8-22
收藏
得分:0 
回复 4楼 heroinearth
如果形参是 int *x  这个就是传值调用所以不修改主函数的指针内容  但是我这里采取了c++里的引用 所以应该是会改变主函数里的指针内容的吧
2013-11-26 19:33
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:0 
你说的对,不过b是个局部变量,函数结束也就被释放
2013-11-26 19:41
yuanhaitaozz
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-8-22
收藏
得分:0 
回复 7楼 heroinearth
嗯 b会被释放  但是地址的内容还在吧 比如
程序代码:
#include <stdio.h>
int *  fun()
{
    int b=6666;
    int *a=&b;
    return a;
}
int main()
{
    int *a=fun();
    printf("%d",*a);
    return 0;
}

这个是可以的啊
2013-11-26 19:55
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:0 
就是值被改变
程序代码:
#include <stdio.h>    
int *  fun(int *&x)
{
    int b=6666;
    x=&b;
    printf("xxxxxxxxxxxxxxxxx%p\n",x);
    printf("xxxxxxxxxxxxxxxxx%d\n",*x);
    return &b;
}
/*int *fun3()
{
    int v=6666;
    int *x=&v;
    printf("xxxxxxxxxxxxxxxxx%p\n",x);
    printf("xxxxxxxxxxxxxxxxx%d\n",*x);
    return x;
}*/
int main()
{
    int *p=NULL,*p1;
    printf("原p存放地址:%p\n",p);
    p1=fun(p);
    if(p==NULL)
        printf("NO DATA!\n");
    else
    {
        printf("后p存放地址:%p\n",p);
        printf("%d\n",*p);
    }
    printf("后p1存放地址:%p\n",p1);
        printf("%d\n",*p1);
    return 0;
}



[ 本帖最后由 heroinearth 于 2013-11-26 20:14 编辑 ]
2013-11-26 19:59
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
当初我还发过这个帖子呢,都给忘了。。

有两位大神回复:
以下是引用crystall在2012-12-13 13:36:37的发言:

函数作用域,局部变量出了作用域,其地址中的内容也许还没有发生改变,但是内存已不被你所控制了。


以下是引用crystall在2012-12-13 13:38:50的发言:

请谨慎:不要把局部地址作为返回值。


以下是引用TonyDeng在2012-12-13 14:15:51的发言:

这是依赖未知行为的企图,要戒!


[fly]存在即是合理[/fly]
2013-11-26 21:02
快速回复:一个指针的问题 不知是忘了还是什么 居然出错了
数据加载中...
 
   



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

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