C语言一个字符串指针问题

#include"stdio.h"main(){char*chp="ABCD";for(;*chp!='\0';chp=chp+2)printf("%s",chp);pr... #include "stdio.h"
main()
{
char *chp="ABCD";
for( ; *chp!='\0'; chp=chp+2)
printf("%s", chp);
printf("\n"); }

这个代码中,运行结果个字符串而不是地址。
那为什么第一个printf中要写chp而不是*chp?
展开
 我来答
kaixingui2012
2012-02-15 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6497万
展开全部
*chp 代表的是一个字符
chp表示的是一个地址
printf("%s", chp); 中的%s要求参数是地址,而不是一个字符!
如果换成:%c 就可以用*chp了,如:
printf("%c", *chp); 这样只输出当前位置的一个字符
追问
%s为什么要求参数是地址?我看教材好像也没说过呀...
再说,如果要求是个地址,那输出结果也不应该是字符串呀
追答
呵呵,%s要求参数是地址,这个可以从printf函数的文档上看到,你可以从网外查一下。
%s要求参数是地址,但输出的内容是地址中的数据,即字符串。
如果想输出地址值,可使用%p来输出,你可以试一下,如:
printf("%p", chp);
详细情况你可以从网上查一下这个函数的使用说明。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
justwithyoumj
2012-02-16
知道答主
回答量:11
采纳率:0%
帮助的人:4.4万
展开全部
*chp (这是一个字符型的指针,它指向的是“ABCD”这个字符串的首地址,不是这个字符串的地址)你如果要用printf();就要写成printf(“%p”,*chp)。。。要是printf(“%s”,*chp),就错了。。
chp (这是一个地址,“ABCD”的首地址),,
这很类似于
char chp[ ]=“abcd”;
输出;;;puts(chp);//或者printf(“%s”,chp);

就这些了,为什么不是*chp,,因为它是一个“指针(*chp)”,它指向“一个地址(chp)”;;;;;
追问
chp是输出地址,而结果是“ABCD”,那就是说字符串的地址就是字符串本身?
追答
这种说法不能说对,但是这样理解是可以的,因为起到了相同的效果,,
举个例子::
;-------------------------------------------------------------------------------
main(){printf(&0["12345%s\n"],"what"+1);}
;-------------------------------------------------------------------------------
输出应该是===:
12345hat
please any key .........
;-----------------------------------------------------------------------------
这个里面,“what”+1,就是字符串“what”的地址向后再移动1,所以就是“hat”(具体的地址要根据编译器而定!);;;所以你可以用你的思路理解;;;
继续努力………………
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7f4f28558
2012-02-15 · TA获得超过272个赞
知道小有建树答主
回答量:489
采纳率:0%
帮助的人:238万
展开全部
printf("%s", chp); 是 显示 字符串
printf("%c", *chp); 是显示 一个 字符
追问
我好像明白了,是不是因为这里的指针变量chp没存放任何地址,只是当做普通变量存放“ABCD”这个字符串?
追答
不是啊,
printf("%s", chp); 是 显示 字符串, 主要 是 %s ,s 就是 字符串,显示 字符串的 时候 要用字符串的起始地址,计算机直到 碰到 字符串结束标志 才停止
printf("%c", *chp); 是显示 一个 字符, 主要 是 %c ,c就是 字符 ,输出字符的 时候 直接 用变量名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式