以下程序运行后的输出结果是()

#include<stdio.h>#include<iostream.h>#include<string.h>main(){charch[]="abc",x[3][4];... #include<stdio.h>
#include<iostream.h>
#include<string.h>
main()
{
char ch[]="abc",x[3][4];
int i;
for(i=0;i<3;i++)
{
strcpy(x[i],ch);
}
for(i=0;i<3;i++)
{
cout<<&x[i][i];
}
cout<<endl;
}
答案是abcbcc
我运行了一下,把cout<<&x[i][i];取地址符&去掉运行结果就是abc,不去掉就是答案所给的结果,为什么?请深度解释一下,谢谢!
展开
 我来答
mxl033
推荐于2016-11-14 · TA获得超过216个赞
知道小有建树答主
回答量:120
采纳率:61%
帮助的人:83.4万
展开全部
 for(i=0;i<3;i++)
 {
  strcpy(x[i],ch);
 }

的作用是把x[3][4]初始化成{"abc", "abc", "abc"},而

 for(i=0;i<3;i++)
 {
  cout<<&x[i][i];
 }

输出的其实是&x[0][0],&x[1][1],&x[2][2],&是取地址符,所以输出类型变为char的指针,而结果就是从当前地址开始,输出其后的字符,直到'\0'结束符为止,而'\0'结束符在字符串"abc"声明时,已经默认添加在末尾了,并在调用strcpy时,赋值给了x的三个二维数组(这也是为什么二维数组的元素个数是4而不是3的原因),所以你看到的结果是"abc""bc""c"

而当你去掉&符号,就变成了输出char类型数据,x[0][0],x[1][1],x[2][2],结果也就变成了'a''b''c'

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式