| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 550 人关注过本帖
标题:[求助]关于指针函数的问题
只看楼主 加入收藏
kicaty
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-10-12
收藏
 问题点数:0 回复次数:8 
[求助]关于指针函数的问题
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf("%s",str);
}
请问运行Test 函数会有什么样的结果?
搜索更多相关主题的帖子: 指针 函数 
2006-10-12 16:43
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
你是考别人还是问别人啊
要是问 你自己运行一下不就行了
2006-10-12 16:50
kicaty
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-10-12
收藏
得分:0 
想知道原因啊!
谢谢了!
2006-10-12 16:51
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

p是局部变量

2006-10-12 16:53
wangbing0123
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-10-21
收藏
得分:0 
这个函数更本就不能运行嘛。 你搞来戏弄大家啊
2006-10-21 21:27
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
楼上两位朋友,知道的话就帮一下楼主,不知道也没有必要用这样的口气说话,行不?

char *GetMemory(void)
{
char p[] = "hello world"; //并不是因为p是局部变量,而是因为你返回了局部变量的地址
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory(); //所以这里str指向的内容仍然是未定义的;
printf("%s",str);
}

不妨改成下面:
1。
char *GetMemory(void)
{
char *p = "hello world"; //这里返回p没有问题,因为p指向的是静态区域的地址,函数调用完毕后内容并没有跟着栈的销毁而销毁,所以OK。
return p;
}

我的原则很简单:不做不喜欢的事!
2006-10-21 22:52
hothui2008
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-10-22
收藏
得分:0 
为何不能返回局部变量的地址?若将p改为全局变量呢?
2006-10-22 13:55
hothui2008
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-10-22
收藏
得分:0 

这样也可:
#include<stdio.h>
char p[] = "hello world";
char *GetMemory(void)
{
//char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf("%s",str);
}

int main()
{
Test();
return 0;
}

2006-10-22 14:06
hothui2008
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-10-22
收藏
得分:0 
不太明白6楼那个局部变量地址的问题,而为什么改为指针操作就行。哪位兄弟知道的讲多一点,小弟感激不尽
2006-10-22 14:12
快速回复:[求助]关于指针函数的问题
数据加载中...
 
   



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

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