为了账号安全,请及时绑定邮箱和手机立即绑定

问个菜鸟问题?

问个菜鸟问题?

C C++
_小松 2016-09-16 12:37:20
char *p="aaaaaa";printf("%s",p);输出:aaaaaa就想问 不是说p中装的是地址吗 为啥我没加*直接输出 得到的不是地址而是字符串? 请赐教!
查看完整描述

4 回答

已采纳
?
Must_so

TA贡献11条经验 获得超18个赞

你可以去看看《编译原理》

printf输出字符串是这样,对着那个地址的字符一直读,直到遇到'\0'

你可能以为printf("%s");这样的语句是错误的,但实际上是可以编译的。

给你玩一段代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	char s[100];
	scanf("%s",s);
	printf("%s");
	return 0;
}

运行结果是这样的:

//img1.sycdn.imooc.com//57dca5e70001f9b701320063.jpg

而当你将scanf改成用gets输入则会出错,这个涉及到scanf等函数的返回地址和printf的原理

之前一学长给讲过但是如果不懂编译原理的话也只是记住了而不懂。

如果实在好奇可以去看编译原理。

查看完整回答
反对 回复 2016-09-17
?
树莓酒

TA贡献3条经验 获得超1个赞

我看有的书上是这么写的:p虽为指向字符串的指针,但它仍是字符串的名称,因此这里可以不使用间接运算符*。

查看完整回答
反对 回复 2016-09-17
?
椰蓉罐头

TA贡献19条经验 获得超4个赞

%s就是输出字符串的啦~

查看完整回答
反对 回复 2016-09-17
?
BlueCode

TA贡献2条经验 获得超0个赞

%s就是输出字符串啊!!

查看完整回答
反对 回复 2016-09-16
  • 4 回答
  • 0 关注
  • 1894 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信