指向字符串的指针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进制整数方式输出指针的值”。这两个解释不一致,到底哪个是正确的? 展开
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进制整数方式输出指针的值”。这两个解释不一致,到底哪个是正确的? 展开
展开全部
你的理解:首先总体评价一下,前半句对,后半句不对。
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,指针的值就是地址,两个解释本质是一样的,都是正确的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询