| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 556 人关注过本帖
标题:指针问题,还是不懂
只看楼主 加入收藏
jjg
Rank: 2
等 级:论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
结帖率:46.15%
收藏
已结贴  问题点数:20 回复次数:7 
指针问题,还是不懂
为什么这段代码有问题:
void GetMemory(char *p)
{
    p=(char*)malloc(100);  //为什么这里修改p的值是并不能真正修改实参的值,讲解详细点
}
void Text(void)
{
    char* str=NULL;
    GetMemory(str);

    strcpy(str,"hollo");
    printf(str);
}
下面这两段代码都正确:
void GetMemory(char **p)
{
    *p=(char*)malloc(100);
}
void Text(void)
{
    char* str=NULL;
    GetMemory(str);
    strcpy(&str,"hollo");
    printf(str);
}




char* GetMemory(char *p)
{
    p=(char*)malloc(100);
    return p;
}
void Text(void)
{
    char* str=NULL;
    str=GetMemory(str);
    strcpy(str,"hollo");
    printf(str);
}
搜索更多相关主题的帖子: 指针 
2010-10-14 13:23
聋眼睛瞎耳朵
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:29
专家分:123
注 册:2010-9-24
收藏
得分:10 
这应该说是一个参数传递的问题。
实参传递给形参,只在函数被调用时,才给形参分配内存单元,接收从实参传递过来的值,在函数调用结束后,将释放其所分配的内存单元。所以修改形参的值不会对实参造成影响。
2010-10-14 13:42
jjg
Rank: 2
等 级:论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
收藏
得分:0 
回复 2楼 聋眼睛瞎耳朵
形参会分配内存吗?只有实参才会分配吧
2010-10-14 16:06
jjg
Rank: 2
等 级:论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
收藏
得分:0 
查了下,会
2010-10-14 16:08
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:3 
p=(char*)malloc(100);这里修改p的值是并不能真正修改实参的值???  这只是为字符指针申请100个字节的内存啊!!什么修改实参,什么意思!

If You Want Something, Go Get It, Period.
2010-10-14 16:17
jjg
Rank: 2
等 级:论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
收藏
得分:0 
我知道怎么回事了,还是那句老话,传地址可以修改值,而传值却不行
2010-10-14 17:22
pangge
Rank: 2
等 级:论坛游民
帖 子:27
专家分:32
注 册:2010-8-30
收藏
得分:5 
这个就是一般的参数传递问题,当你的函数参数是值传递方式传给形参后(注意在内存中,形参是分配在栈中的),函数一结束,内存中的形参就被释放,因为无返回值。解决方法可以用引用(&+引用参数名),或者用LZ第二段的正确程序把形参做成二维指针即可(如:void GetMemory(char **p)
)。
2010-10-14 21:57
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
多年不见,差点不知道什么是形参什么是实参了……
2010-10-14 22:43
快速回复:指针问题,还是不懂
数据加载中...
 
   



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

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