| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1564 人关注过本帖
标题:请教字符串指针问题
只看楼主 加入收藏
sunlong
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-4-24
收藏
 问题点数:0 回复次数:8 
请教字符串指针问题
如下小程序:
#include <iostream>
using namespace std;
int main()
{
    char *pc="HELLO";
    cout<<pc<<endl;
    cout<<*pc<<endl;

    return 0;
}
为什么cout<<pc<<endl;得到的结果是 HELLO 。若有高手知晓,请详细解释下。谢谢
搜索更多相关主题的帖子: 指针 字符 
2008-11-26 09:37
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
收藏
得分:0 
lz是不是认为应该输出地址?
如果输出地址的话需要作类型转换(unsigned *)pc
2008-11-26 11:06
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
收藏
得分:0 
01 #include <iostream>
02 using namespace std;
03 int main()
04 {
05         char *pc="HELLO";
06         cout<<pc<<endl;
07         cout<<*pc<<endl;
08         cout<<(unsigned *)pc<<endl;
09
10         pc=pc+3;
11         cout<<pc<<endl;
12         cout<<*pc<<endl;
13         cout<<(unsigned *)pc<<endl;
14
15         return 0;
16 }
[/font]


最后的输出结果是:
pascale@pascale-laptop:~/tech/dev/c++/p5-str$ ./a.out
HELLO
H
0x8048980
LO
L
0x8048983

[[it] 本帖最后由 pascale 于 2008-11-26 11:11 编辑 [/it]]
2008-11-26 11:10
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
收藏
得分:0 
pc输出的是整个字符串
*pc输出的是字符串的首字母
(unsigned *)pc输出的是字符串的地址
2008-11-26 11:13
sunlong
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-4-24
收藏
得分:0 
多谢楼上,其实我是想知道,cout<<pc<<endl;能输出字符串的内部机理!
2008-11-26 11:58
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
你看看<<的运算符操作吧...我没看过,估计是到'\0'结束

学习需要安静。。海盗要重新来过。。
2008-11-26 12:11
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
收藏
得分:0 
可以不定义字符数组,而定义一个字符指针。用字符指针指向字符串中的字符。

[例8.12]

void main(void)

{char *string="I Love China!";

printf("%s\n",string);

}

在这里没有定义字符数组,但C语言对字符串常量是按字符数组处理的,实际上在内存开辟了一个字符数组用来存放字符串数组。在程序中定义了一个字符指针变量string。并把字符串首地址(即存放字符串的字符数组的首地址)赋给它(见图8.18)。有人认为string是一个字符串变量,以为定义时把"I Love China!"赋给该字符串变量,这是不确切的。定义string的部分:

char *string="I Love China!";

等价于下面两行:

char *string;

string="I Love China!";

可以看到:string被定义为一个指针变量,它指向字符型数据,请注意只能指向一个字符变量或其它字符类型数据,不能同时指向多个字符数据,更不是把"I Love China!"这些字符存放到string中。只是把"I Love China!"的首地址赋给指针变量string(不是把字符串赋给*string)。因此不要认为上述定义行等价于:


char *string;

*string="I Love China!";

在输出时,用

printf("%s\n",string);

%s表示输出一个字符串,给出字符指针变量名string,则系统先输出它所指向的一个字符数据,然后自动使string加1,使之指向下一个字符,然后再输出一个字符,……,如此直到遇到字符串结束标志‘\0’为止。注意,在内存中,字符串的最后被自动加了一个‘\0’(如图8.18所示),因此在输出时能确定字符串的终止位置。
2008-11-26 14:21
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
收藏
得分:0 
上面是转载过来的对应的C的资料
cout类似
2008-11-26 14:21
sunlong
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-4-24
收藏
得分:0 
则系统先输出它所指向的一个字符数据,然后自动使string加1,使之指向下一个字符,然后再输出一个字符,……,如此直到遇到字符串结束标志‘\0’为止.
多谢楼上。
字符指针对于<<来说,全作为字符串的首地址来处理,它会不断输出这个地址及其后面地址里存放的内容,只到遇到'\0'。看来和其他类型的内部实现机理略有不同啊
2008-11-26 15:28
快速回复:请教字符串指针问题
数据加载中...
 
   



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

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