c语言中char类型数组的输出问题--输出时为何需要&符?

来源:百度知道 编辑:UC知道 时间:2024/07/02 10:12:21
例如:
#include<stdio.h>
main()
{ char s[]="how are you" ;
printf("%s",&s[0]);
getch();
}
为何要用&符号能输出"how are you",不加&符号而绘出乱码?小弟初来乍到,所贡积分不多。请原谅!谢谢回答。

printf("%s",s[0]); -- 不加&符号 s[0] 表示 整型值,数值等于s[]里第一个字符(你的情况是h) 的 ASCII 值,如果用%d 格式打印,得104,如果用%c 格式打印,得字母h, 用%s打印 得乱码。

printf("%d",s[0]); 打出 104
printf("%c",s[0]); 打出 h

%s 输出格式,用于字符串,要求给 字符串的首地址,
char s[] 的首地址 是 &s[0] 或 s.

printf("%s",s); 打出 how are you
printf("%s",&s[0]); 打出 how are you
printf("%s",&s[1]); 打出 ow are you
printf("%s",&s[2]); 打出 w are you
....

在C语言中数组的名字即数组的起始地址,也是数组第一个元素的地址。因此,假设有一个char类型的数组a表示成如下代码:
char a[20];
那么a表示字符数组的起始地址,它和&a[0]是一个意思。

使用printf()输出字符数组a的内容:
printf("%s\n", a);
它就等同于
printf("%s\n", &a[0]);

记住C语言的NB之处在于在处理字符串的时候使用一种超乎寻常的思维: 用一地址或字符指针就可以代表一字符串!
当然,想打印一字符串,也通过这种方式就可以获得。
为什么呢?
因为C语言内部的机制表明: 它对字符串的处理是,遇到'\0',其实也就是0,就表明字符串结束了,所以呢,不论这个指针在什么位置都没关系,编译器会依次向后寻找字符,知道遇到NULL(或0或'\0')就算字符串结束了。

你前面输出格式为"%s&q