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

例如:#include<stdio.h>main(){chars[]="howareyou";printf("%s",&s[0]);getch();}为何要用&符号能输出... 例如:
#include<stdio.h>
main()
{ char s[]="how are you" ;
printf("%s",&s[0]);
getch();
}
为何要用&符号能输出"how are you",不加&符号而绘出乱码?小弟初来乍到,所贡积分不多。请原谅!谢谢回答。
展开
 我来答
帐号已注销
2020-02-15 · TA获得超过77.1万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:167万
展开全部

在C语言中数组的名字即数组的起始地址,也是数组第一个元素的地址。因此,假设有一个char类型的数组a表示成如下代码:

char a[20];

那么a表示字符数组的起始地址,它和&a[0]是一个意思。

使用printf()输出字符数组a的内容:

printf("%s\n", a);

就等同于printf("%s\n", &a[0]);

输出的时候用:

int i = 0;

for (i=0; i<10; i++) {

printf("a[%d]=%c\n", i, a[i]);

}

防止缓冲区溢出可以用这样的:

fgets(a, sizeof(a), stdin);

a[strlen(a) - 1] = '\0';

扩展资料:

如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。

如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。

参考资料来源:百度百科-字符数组

吉祥二进制
高粉答主

推荐于2016-05-12 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84582

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

使用printf()输出字符数组a的内容:
printf("%s\n", a);
它就等同于
printf("%s\n", &a[0]);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
L_o_o_n_i_e
推荐于2018-03-05 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5238万
展开全部
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
....
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
知知学店
2008-06-30 · TA获得超过404个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:177万
展开全部
你前面输出格式为"%s"即字符串类型,后面对第一个字符s[0]加&
表示为取得整个字符串的首地址,再以字符串的格式肯定读出的是
整个字符串,如果你把"%s"改为"%c"把&去掉就会输出首字符,
如果只把&去掉,那么你是以字符串的格式输出首字符,格式不对当然是乱码了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cxsjabc
2008-07-01 · 超过26用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:0
展开全部
记住C语言的NB之处在于在处理字符串的时候使用一种超乎寻常的思维: 用一地址或字符指针就可以代表一字符串!
当然,想打印一字符串,也通过这种方式就可以获得。
为什么呢?
因为C语言内部的机制表明: 它对字符串的处理是,遇到'\0',其实也就是0,就表明字符串结束了,所以呢,不论这个指针在什么位置都没关系,编译器会依次向后寻找字符,知道遇到NULL(或0或'\0')就算字符串结束了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式