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

把字符串赋给一个指针变量,即是把字符串的首地址赋给该指针变量。

char *p="hello";

那么当我们输出p时,是不是输出地址呢?不是。请看下面四种情况:

printf("%s\n",p);//输出结果是hello

printf("%s\n",*p);

//运行出错。“0x00401a8c”指令引用的“0x00000043”内存。该内存不能为“read”.

cout<<p<<endl;//结果是hello

cout<<*p<<endl;//结果是h

既然p保存的是地址,为什么cout<<p; 输出的不是地址呢?

搜索更多相关主题的帖子: 指针 内存 字符 hello 变量 
2006-07-27 11:28
喝茶的小k
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-7-27
收藏
得分:0 
我也不懂,哪为高人来指导一下

2006-07-27 12:16
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 

那么当我们输出p时,是不是输出地址呢?
======================================
这句话本身表达就有问题。输出是不是地址跟你的表达式有关。
-----> printf("%d", p); //输出了指针p的地址
-----> printf("%s", p); //输出了指针p所指向的内容


printf("%s\n",p);//输出结果是hello
printf("%s\n",*p);
//运行出错。“0x00401a8c”指令引用的“0x00000043”内存。该内存不能为“read”.
======================================
char *p = "hello"; //这样指针p指向了字符串的首地址,所以对p的解引用*p其实就是字符串的首个字符,
//所以应该是 -->printf("%c", *p); 才对;


我的原则很简单:不做不喜欢的事!
2006-07-27 12:44
神经塔
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1986
专家分:4
注 册:2006-7-1
收藏
得分:0 

有道理!


[shadow=255,red,2]待到秋来九月八,我花开时百花杀。冲天香阵透长安,满城尽是黄金甲。 [/shadow]
2006-07-27 12:49
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
收藏
得分:0 

printf("%s\n",*p);
//运行出错。“0x00401a8c”指令引用的“0x00000043”内存。该内存不能为“read”.

cout<<*p<<endl自动匹配了格式,输出*p所指的值?而printf("%s\n",*p)编译器不会报错,而是运行程序时出现问题。这是为什么呢?能不能解吸下%s的含义啊。

2006-07-27 13:44
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 

准确的说 %p 才是输出指针的地址

而楼主的问题..请详细参考下 %s 的解释

printf("%s\n",*p); 这句是完全的理解错误!


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-27 14:21
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
其实cout和printf一样,可以看作是格式化输出的函数.对于字符串的输出,cout<<字符串指针<<endl;cout对后面的参数自动匹配格式,当检查到参数为指针时,会自动检查后面连续的内存地址的存储,如果遇到'\0',(即构成一个字符串,)则依次把指针指向的字符和后面的字符输出,直到遇到'\0'为止。
应用于分析楼主的话,
虽然p保存的是地址,但对于cout<<p; 检查到p为指向字符的指针,且后面连续的存储单元有'\0'出现,cout自动匹配了格式,变为printf("%s",p);了。
对于c++,我只知道一点点,上面仅仅是我的理解,很有可能是错的

对不礼貌的女生收钱......
2006-07-27 14:28
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
cout会自动匹配输出格式,因为这个类包含了许多重载函数。

倚天照海花无数,流水高山心自知。
2006-07-27 15:13
喝茶的小k
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-7-27
收藏
得分:0 

不错啊


学到不少东西


2006-07-27 16:23
2006_xly
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-7-26
收藏
得分:0 

把字符串赋给一个指针变量,即是把字符串的首地址赋给该指针变量。

char *p="hello";

这个问题本质就是指针访问字符串

只是把hello串的第一个字符的地址赋给了P,在输出项中给出了P,系统就输出了第一个字符,

然后依次加一,知道遇到\0为止


做事全身心的投入,一步一个脚印!!!
2006-07-27 16:57
快速回复:[求助]字符串指针
数据加载中...
 
   



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

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