指向字符串的指针printf输出问题?

有一个例程那个看不明白:intmain(void){char*str="china";printf("1straddris:%p\n",str);printf("2str... 有一个例程那个看不明白:
int main(void)
{
char *str ="china";

printf("1 str addr is:%p\n",str);
printf("2 str is:%s\n",str);
printf("3 *str is:%s\n",*str);
}

运行结果:
1 str addr is:80007406
2 str is:china
3 *str is:

我的理解:str是字符串“china”的地址,*str才是字符串“china”。
问题:
1、第三行:要输出字符串,按理说不是应该输出“*str”么?那不应当是第三行的写法么?但第三行为何没有输出?
2、第二行:str是一个地址,也就是说是一个16进制数,为什么能在printf里用“%s”?
为什么第二行输出的不是地址而是内容“china”?
3、第一行:%p的解释是什么意思?有两种解释:(1)例程里的解释是“%p”的作用是输出字符串“china”的地址;(2)很多资料里说“%p”是“以16进制整数方式输出指针的值”。这两个解释不一致,到底哪个是正确的?
展开
 我来答
听不清啊
高粉答主

2020-10-25 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

这里的第三行是写错了。应该是

printf("3 *str is:%c\n",*str);

才对的。

%p格式符用来输出变量在内存中的地址,是一个十六进制数 //常用的格式符有 %d是十进制格式,%o是八进制格式,%x是十六进制格式。

因为str是char*,所以,*str是一个字符。str是一个字符数组的首地址,*str就是这个字符串的首字符。

heptnaol
2020-10-25 · TA获得超过7260个赞
知道大有可为答主
回答量:7120
采纳率:78%
帮助的人:1760万
展开全部

你的理解:首先总体评价一下,前半句对,后半句不对。

str是字符c的地址,c后面紧跟着hina,然后跟着一个'\0',china和'\0'合在一起,称作“字符串”,即字符串是以'\0'结尾的字符序列。

当然了,字符串的地址就是字符串第一个字符的地址,找到了第一个字符,就找到了字符串,所以前半句对了。

后半句和问题1整合在一起了,真相和你认识的可能相距甚远,希望你能仔细理解,最好用代码验证。

下面分别回答3问题

1,*str 等价于str[0],是一个char,而要输出字符串,需要%s格式,并且要求一个char *指针做参数,你传了一个char,不崩溃就感谢比尔盖茨吧。

你可以试试printf("%c", *str);结果是输出c

2,%s就是需要一个地址,具体来说是一个字符串的地址。以%s这种格式,输出的就是字符串的整个内容。

3,指针的值就是地址,两个解释本质是一样的,都是正确的。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式