| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 910 人关注过本帖
标题:为什么GetMemory()函数返回的指针不对?
只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
已结贴  问题点数:10 回复次数:2 
为什么GetMemory()函数返回的指针不对?
程序代码:
#include "u_def.h"
#include <stdio.h>
#include "u_linearStruct.h"
char *GetMemory(void)
{
    const char p[] = "hello world.\n";
    return (char*)p;
}
int main( int ac, char **av )
{
    char *pstr = NULL;
    pstr = GetMemory();
    printf("%s\n", pstr);
    return 0;
}
子函数char *GetMemory(void)中的变量p是const类型的,应该不是在堆栈中,但是为什么程序还是不能输出 hello world. 呢?
在VC6编译器时 提 示:warning C4172: returning address of local variable or temporary,
而当我设置成 static char p[] = "hello world.\n";后就发现没有这个警告warning C4172: returning address of local variable or temporary了!
说明这个p还 是局部变量呀?看来这个const只能约束变量是不变的,而并不能说明是常量区吗?


[ 本帖最后由 vfdff 于 2010-7-17 03:11 编辑 ]
搜索更多相关主题的帖子: 函数 指针 GetMemory 
2010-07-17 02:44
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:10 
因为你没有理解const的精神。

char *GetMemory(void)
{
    const char p[] = "hello world.\n";        //const char p[]这样的形式,你已经指定在栈中分配空间了。所以不可能在.CONST区中保留空间。
    return (char*)p;
}

char *GetMemory(void)
{
    const char *p = "hello world.\n";        //OK,在.CONST区中保留空间。
    return (char*)p;
}



举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-07-17 08:30
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
程序代码:
char *GetMemory(void)
{
    const char *p = "hello world.\n";        //OK,在.CONST区中保留空间。
    return (char*)p;
}
这里的不良p本身还是在堆栈中的!

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-02 00:54
快速回复:为什么GetMemory()函数返回的指针不对?
数据加载中...
 
   



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

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