请问这个printf为什么要加& 应该在scanf才加&吧

#include<stdio.h>
#include<string.h>
main()
{ char w[ ][10]={"ABCD","EFGH","IJKL","MNOP"},K;
for(k=1;k<3;k++)
printf("%s\n",&w[k][k]);
} 
",&w[k][k]); 在printf 难道要加&
这是为什么呢?

没有问题的,这个只是用了一个字符串输出的小技巧

w[k][k]是一个二维数组成员,那么&w[k][k]就是这个成员的地址,
那么以%s这个输出控制符来进行printf的话,
就变成了输出以&w[k][k]为首地址的字符串。

我们将w展开,可以看成如下:
"ABCD"
"EFGH"
"IJKL"
"MNOP"

当k=1时,w[k][k]就是'F',那么&w[k][k]就是'F'的地址,
以%s这个输出控制符来进行printf的话,
就变成了输出以'F'的地址为首地址的字符串,
输出"FGH"

当k=2时,w[k][k]就是'K',那么&w[k][k]就是'K'的地址,
以%s这个输出控制符来进行printf的话,
就变成了输出以'K'的地址为首地址的字符串,
输出"KL"

所以最后输出结果为:
FGH
KL
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-16
printf("%s",var);的意思是输出从var所指的地址开始的一个字符串,自然var就必须是一个地址。&w[k][k]所指向的地址你应该能分析出来吧,再实际执行一下你就明白了
第2个回答  2009-04-16
该printf()函数输出的是w[k][k]的地址,也许这个程序就想输出地址吧.如果没有&,则输出的是w[k][k]的值
第3个回答  2009-04-16
&是取址符,加了后输出的是地址的值
第4个回答  2009-04-16
去地址符号啊 输出的是地址哦

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网