C语言字符串输出问题

char a[10];
scanf("%s",&a[0]);
printf("%s",&a[0]); 一般来说,scanf和printf同一个对象不是应该在scanf里多一个&吗

为什么这里输出字符串的时候 两个语句里都是&a[0]?这不矛盾吗?为什么printf里不能写成a[0]呢?或者scanf里写成&&a[0]?

你好,是这样的,C语言中字符数组相当于字符指针,而字符数组名相当于指针变量名,它代表的是字符串在内存中的首地址,所以char s[10] scanf("%s",s);是不需要加&取地址符的,printf("%s",s) 就可以了。
前面说到数组名代表的是数组的首地址,所以,s=&a[0]; 而你上面的代码中是同过a[0]来输出字符串的,所以得加&,加上后相当于printf("%s",s); 所以printf也要加。如果不加,输出的知识某个元素的值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-10
&a[0]提供一个地址,没问题吧

printf("%s",&a[0]);大致相当于puts(&a[0]);输出的是地址所带表的字符串

你要是改成%d %c之类的就输出的是地址了
第2个回答  2013-01-10
关键是你这里的格式输出是什么来着?
%s.你换成%c试试。
第3个回答  2013-01-10
这只是你自己的想法而已,没有什么多考究的,人家C库就设计成那样啦,要不你用,要吗你就不用,不可能让C库区适合你自己的想法,得你去适合C库去
相似回答