这个是之前在编写一个程序的时候突发奇想,然后出错现在把原因记录下来。在如下的程序中我当时想我们在输出字符串的时候可以直接用变量名就可以输出字符串的内容,那么数组为什么就费用要用for循环来逐一输出呢?
#include <stdio.h>
int main()
{
int a[]={1,2};
printf("%d\n",a);
printf("%p\n",a);
char b[]={"hello"};
printf("%s",b);
return 0;
}
运行结果
其实这里是因为没有将数组的一些特性没有理解透彻,前面也说过C语言的数组的存储地址就是C语言第一个元素的存储地址。在这里的代码中输出时我们调用的是a,在这里a表示的就是数组a的存储地址,又因为我们控制了为%d类型,所以将原本的十六进制的地址又强制转换为了十进制。字符串因为可以连续读取,所以不会出现这种情况。所以才造成了C语言中字符串可以通过变量名直接输出而数组却不可以的情况。
为了验证我们上面的结论我们将输出的结果6487568转化为十六进制看一下结果是否和他的地址相同就知道了。
在这里通过某在线进制转换器转换得到结果和我们的地址相同,结论得到验证。