问一个C语言数组的问题

代码:
#include<stdio.h>
main(){
char a[10]={"hello"};
int b[10]={1,2,3,4,5,6};
printf("%s\n",a);
printf("%d\n",b);
}
输出结果:
hello
2686720

我想问为什么同样是用数组名(就是数组首元素地址对吧)字符数组输出的是字符串,而整型数组输出的是数组首元素地址?

因为%s会使程序认为要输出的是字符串,即从字符数组首地址开始遇到'\0' 为止。
而%d使程序认为要输出的为整型值,因此地址被强制转换为了整型值输出。追问

赶脚这样解释有点那啥,我想着应该有更深层的(原理的)解释吧。就像规则是这样,但是为什么规则是这样?

追答

为什么是这样吗,因为%就是格式化控制的意思,对于给定的数据,按照要求的格式显示或保存。
这是C语言规则的一部分,有这个规则,我猜,是因为C语言作者认为,在具体的编程应用中,这样实现很方便、灵活...
更深层的实现你可以试着去找printf的源代码。

温馨提示:答案为网友推荐,仅供参考
相似回答