永发信息网

请各位C语言大神给解答下下面的程序是怎样输出的 #include<stdio.h> main() { char w[][10]={"ABCD","EF&quo

答案:5  悬赏:0  手机版
解决时间 2021-01-30 18:33
  • 提问者网友:呐年旧曙光
  • 2021-01-30 07:36
请各位C语言大神给解答下下面的程序是怎样输出的 #include<stdio.h> main() { char w[][10]={"ABCD","EF"
最佳答案
  • 五星知识达人网友:痴妹与他
  • 2021-01-30 08:34
#include
void main()
{
char w[][10]={"ABCD","EFGH","IGKL","MNOP"};
int k;

for(k=1;k<3;k++)
{
printf("%s",&w[k][k]);
}
}
w数组的存储结构:
- w 0x0013ff58
+ [0] 0x0013ff58 "ABCD" 第一行对应w[0],w[0][0]对应A,w[0][1]对应B,w[0][2]对应C,w[0][3]对应字符D,
+ [1] 0x0013ff62 "EFGH" 第二行对应w[1],w[1][0]对应E,w[1][1]对应F,w[1][2]对应G,w[1][3]对应字符H,
+ [2] 0x0013ff6c "IGKL" 第三行对应w[2]],w[2][0]对应E,w[2][1]对应F,w[2][2]对应G,w[2][3]对应字符H,
+ [3] 0x0013ff76 "MNOP" 第四行对应w[3]

k=1时,w[k][k]=w[1][1],由于前面&w[k][k]加了取地址符号&,所以此时是相当于一个指针,当以%s输出时,会输出以结束符\0为结束的字符串,w[1][1]对应第二行第二列,即&w[1][1]指向F对应的地址,此时printf("%s",&w[k][k]);以字符串输出,那么结果为FGH。

k=1时,w[k][k]=w[2][2],由于前面&w[k][k]加了取地址符号&,所以此时是相当于一个指针,当以%s输出时,会输出以结束符\0为结束的字符串,w[2][2]对应第三行第三列,即&w[2][2]指向K对应的地址,此时printf("%s",&w[k][k]);以字符串输出,那么结果为KL。

所以结果:FGHKL
全部回答
  • 1楼网友:骨子里都是戏
  • 2021-01-30 13:12
数组使用下标访问的起始位是0 !
所以你打印的分别是:FGH KL
  • 2楼网友:大漠
  • 2021-01-30 12:13
答案应该是FGH KL,
w[0]里面“ABCD”
w[1]里面“EFGH”
w[2]里面“IGKL”
w[3]李main“MNOP”
当k=1时,&w[1][1],输出FGH
当k=2时,&w[2][2],输出KL
  • 3楼网友:神鬼未生
  • 2021-01-30 10:36
数组下标从0开始
第一个维度是字符串个数,这个数组有4个字符串
第二个维度是每个字符串最大长度
&w[k][k]表示取地址,w[1][1]为F,取地址打印的意思是打印字符串至'\0'字符
  • 4楼网友:你哪知我潦倒为你
  • 2021-01-30 09:56
应该是输出FGHKL吧,FGK我就没法解释了。
字符存储:
第0行:ABCD\0+5个垃圾值
第1行:EFGH\0+5个垃圾值
第2行:IJKL\0+5个垃圾值
第3行:MNOP\0+5个垃圾值
for循环执行两次,k为1时w[k][k]就是F,然后取地址作为一个字符串首地址匹配上%s,所以输出FGH;k为2时w[k][k]就是K,就输出了KL。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯