| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 864 人关注过本帖
标题:指针问题
取消只看楼主 加入收藏
wskanss
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-9-19
收藏
 问题点数:0 回复次数:6 
指针问题

char *getstring(void)
{
char *P = "aaaaaaaa";
return p;
}
void main(void)
{
char *q=NULL;
q=getsring(void);
printf("%s",q);
}

分析一下;为什么没有正确结果出来。
我认为P为指针常量,在静态存储区,传过来前是不会消失的。
结果应该是正确的啊,
看到一种解释说返回的始终只是同一个“只读”内存块,什么意思???

搜索更多相关主题的帖子: 指针 
2006-10-12 20:05
wskanss
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-9-19
收藏
得分:0 
不是吧,我在win-TC跟turb c上运行都不对。
char *q=NULL;这样只是赋个初值可以防止滥用啊
2006-10-12 20:14
wskanss
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-9-19
收藏
得分:0 

re: 函数调用时
q=getsring(void);//怎么还有void
q=getstring();

我觉得这样规范些吧,从一本书上看来的

2006-10-12 20:20
wskanss
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-9-19
收藏
得分:0 
不信大家去运行试一下,
char *getstring(void)
{
char *p = "aaaaaaaa";
return p;
}
void main(void)
{
char *q = NULL;
q = getsring(void);
printf("%s",q);
}
这个也一样啊,都没结果,什么也没有,还有一次运行结果乱码。
又运行有一次编译报错。
2006-10-12 20:27
wskanss
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-9-19
收藏
得分:0 

那个是不要用void,但还是无法得出正确结果
去运行一下就发现了

2006-10-12 20:32
wskanss
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-9-19
收藏
得分:0 
算了,我不说了,我发最先后一次。就算我把那些笔误全改过来也不行
我当初是发快了点,有些错误。

我只是希望大家实际运行测试一下。
2006-10-12 20:41
wskanss
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-9-19
收藏
得分:0 


#include <stdio.h>

char *getstring(void)
{
char *p = "aaaaaaaa";
printf("%s",p);
printf("%s",p+1);
return p;
}
void main(void)
{
char *q=NULL;
q=getstring();
getch();
printf("%s",q);
}
楼上的说对了,在加入以上两条语句printf(),跟getch()后发现*(p+1)的值可以改变,或许真的是在存在栈上
而不是在静态存储区。如果是这样,那么这程序肯定是错的了,
我用的是win-tc环境。
这个问题在林锐的那个《C/C++高质量编程》有解说。即使是在静态存储区也会有问题,但我没看明白。

2006-10-12 21:53
快速回复:指针问题
数据加载中...
 
   



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

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