| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 864 人关注过本帖
标题:指针问题
只看楼主 加入收藏
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
char *getstring(void)
{
char *p = "aaaaaaaa";
return p;
}
void main(void)
{
char *q = NULL;
q = getsring();
printf("%s",q);
}

=×&D o I p R e E n C g T l X&×=
2006-10-12 20:29
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 
怎么还在发呢的..你注意一下你的笔误好不好,不是大写就小写的,还有漏写q = getsring(void);//q = getstring(void);


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-10-12 20:30
wskanss
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-9-19
收藏
得分:0 

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

2006-10-12 20:32
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
新手吗.没什么奇怪的.

=×&D o I p R e E n C g T l X&×=
2006-10-12 20:32
wskanss
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-9-19
收藏
得分:0 
算了,我不说了,我发最先后一次。就算我把那些笔误全改过来也不行
我当初是发快了点,有些错误。

我只是希望大家实际运行测试一下。
2006-10-12 20:41
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
如果改过来了之后真的没有问题了呀1

=×&D o I p R e E n C g T l X&×=
2006-10-12 20:43
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 

没人说你怎么样的,运行这个试试

#include <stdio.h>

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


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-10-12 20:43
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 
对于早期的编译器,char *p = "aaaaaaaa";这个字符串当成局部变量.

如果p指的内容可变,比如*(p+1)的值可以改变,那么这个串就存在栈上,

如果p指的内容不可变,那么就存储在静态存储区.

[此贴子已经被作者于2006-10-12 21:31:28编辑过]


2006-10-12 21:28
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
char *getstring(void)
{
char *p = "aaaaaaaa";
return p;
}
void main(void)
{
char *q=NULL;//这个初始化可以不要,但最好写.
q=getstring();
printf("%s",q);
}
的确没有错.我用win-tc,c-free,vc编译器试过了.

倚天照海花无数,流水高山心自知。
2006-10-12 21:45
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.021193 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved