| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1387 人关注过本帖, 1 人收藏
标题:关于变量作用域的问题
只看楼主 加入收藏
xiedj
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2013-5-30
结帖率:66.67%
收藏(1)
已结贴  问题点数:20 回复次数:20 
关于变量作用域的问题
程序如下:
#include<stdio.h>
#include<malloc.h>
void f(int * p)
{
    int * q=(int *)malloc(sizeof(int));
    * q=5;
    p=q;
    //printf("%d\n",* p);
    return;
}
int main(void)
{
    int * p;
    f(p);
    printf("%d\n",* p);
    return 0;
}
q指向动态分配的内存单元,先给*q赋值,再把p指向q所指单元,调用函数之后在主函数中无法输出*p的值,求解原因。
搜索更多相关主题的帖子: include return 动态 
2013-10-17 10:28
西安郑鑫
Rank: 7Rank: 7Rank: 7
来 自:陕西
等 级:黑侠
帖 子:163
专家分:624
注 册:2013-9-26
收藏
得分:0 
看的我晕乎,不过我发现了严重的问题,你的f()函数中的return后面怎么不写*p呢。
应该是
程序代码:
int f(int * p)
{
    ...
    return *p;
}

Hello World!------鑫花璐放
2013-10-17 10:40
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:10 
二楼,楼主这样是可以的,因为函数的返回值是void
楼主的问题在于,
函数中的p本身的地址和外界的p本身的地址不一样,也就是说这两个p根本不是同一个东西
函数传参传的只是值而已
可以这样解决,
把函数形参去掉
或形参改为二级指针
或传出来

[ 本帖最后由 pycansi 于 2013-10-17 12:37 编辑 ]


莫问前尘有愧,但求今生无悔
2013-10-17 12:30
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
函数是传值的

总有那身价贱的人给作业贴回复完整的代码
2013-10-17 12:38
jia3111
Rank: 2
等 级:论坛游民
帖 子:37
专家分:92
注 册:2012-9-20
收藏
得分:0 
如果要传地址,可以用&来引用
程序代码:
#include<stdio.h>

 #include<malloc.h>

 void  f(int &p)

 {
     int *q=(int *)malloc(sizeof(int));
    
     *q=5;
     p=*q;
     //printf("%d\n",p);
     return ;

 }

 int main()

 {
      int m;
      f(m);

    
     printf("%d\n",m);
     return 0;

 }
三楼的二级指针,表示不懂
在函数里声明的变量,一般只能在函数里面使用。
2013-10-17 13:11
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 5楼 jia3111
你的代码,自己再琢磨琢磨

总有那身价贱的人给作业贴回复完整的代码
2013-10-17 13:13
xiedj
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2013-5-30
收藏
得分:0 
“函数中的p本身的地址和外界的p本身的地址不一样,也就是说这两个p根本不是同一个东西”有点似懂非懂啊,能详细说说吗?
2013-10-17 22:02
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
想好了再发表意见和给出代码哈,别误导了别人

思考赐予新生,时间在于定义
2013-10-17 22:17
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
回复 7楼 xiedj
建议在纸上好好理理关系,我觉得这个还是留给你自己想比较好


莫问前尘有愧,但求今生无悔
2013-10-17 23:38
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
试试这个 ,
#include "stdio.h"

void f (int* p)
{
        printf ("%d\n", &p);
        return;
}
int main (void)
{
        int* p;
        f (p);
        printf ("%d\n", &p);
        
        return 0;
}

[ 本帖最后由 pycansi 于 2013-10-17 23:44 编辑 ]


莫问前尘有愧,但求今生无悔
2013-10-17 23:42
快速回复:关于变量作用域的问题
数据加载中...
 
   



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

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