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; }
运行结果是这样的:
而当你将scanf改成用gets输入则会出错,这个涉及到scanf等函数的返回地址和printf的原理
之前一学长给讲过但是如果不懂编译原理的话也只是记住了而不懂。
如果实在好奇可以去看编译原理。
- 4 回答
- 0 关注
- 1881 浏览
添加回答
举报
0/150
提交
取消