使劲码码码码码码字
2021-04-14 10:44
采纳率: 100%
浏览 66

printf("%s\n",ptr); 为啥输出的是字符串,而不是字符串的地址?

代码如下

#include <stdio.h>
#include <stdlib.h>
#define STR_LEN 80
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	char str[STR_LEN+1];
	char *ptr = str;//字符指针
	printf("input a string");
	gets(ptr);
	printf("%s\n",ptr); 
	return 0;
}

输出ptr应该是输出一个地址,但是这段代码为什么输出的是字符串。我认为的正确的输出代码是

printf("%s",*ptr);
  • 点赞
  • 收藏

6条回答 默认 最新

  • 已采纳

    输出一个数组,肯定是数组的内容呀,数组名称本来就是第一个元素的地址。字符指针其实就是数组。

    点赞 打赏 评论
  • CSDN专家-丸子老师 2021-04-14 13:07

    可以用%x打印看看,这个是专门用来打印地址的

    点赞 打赏 评论
  • 毛惜时 2021-04-14 11:05

    问题的关键在printf上,printf中的%s参数要求你提供一个指针,表示从这个地址开始打印到字符串\0结束标志。这是c语言的语法上规定好的。

    点赞 打赏 评论
  • 毛惜时 2021-04-14 11:08

    再给你举几个例子。
    例一:printf( "%d",*p );

    printf中的%d参数要求你提供一个整数,而p是个指针,它指向的是整数,这时用*p表示p指向的整数。如果你用p的话,将把指针的地址取值进行输出。

    例二:printf( "%s",p );

    printf中的%s参数要求你提供一个指针,而p就是一个指针变量,可以直接写变量名p

    点赞 打赏 评论
  • 有问必答小助手 2021-04-14 16:53

    您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    点赞 打赏 评论
  • 有问必答小助手 2021-04-15 17:06

    非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

    速戳参与调研>>>https://t.csdnimg.cn/Kf0y

    点赞 打赏 评论

相关推荐 更多相似问题