问个菜鸟问题?

char *p="aaaaaa";
printf("%s",p);

输出:aaaaaa
就想问 不是说p中装的是地址吗 为啥我没加*直接输出 得到的不是地址而是字符串? 

请赐教!



_小松
浏览 1895回答 4
4回答

Must_so

你可以去看看《编译原理》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的原理之前一学长给讲过但是如果不懂编译原理的话也只是记住了而不懂。如果实在好奇可以去看编译原理。

树莓酒

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

椰蓉罐头

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

BlueCode

%s就是输出字符串啊!!
打开App,查看更多内容
随时随地看视频慕课网APP