#include<stdio.h> #include<string.h> void main() { char ch[]="abc",x[3][4]; int i; for(i=0;i<3;i++)

#include<stdio.h>
#include<string.h>
void 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++)
printf("%s",&x[i][i]);
printf("\n");
}

为什么答案是abcbcc

你要把这个答案分成三部分来看:abc,bc,c。
当i==0时,输出x[0][0]的地址所在的字符串,明显是abc;
当i==1时,输出x[1][1]的地址所在的字符串,所以跳过a,从b开始输出,即bc;
当i==2时,输出x[2][2]的地址所在的字符串,所以跳过ab,从c开始输出,即c;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-22
我来试解一下,ch[]数组有4个元素(字符串会自动在结尾加'\0'),这样对x[][]数组赋值时过程如下:
1、x[0][0]-x[0][3]=abc,x[1][0]=\0;
2、x[1][0]-x[1][3]=bc,x[2][0]=\0;
3、x[2][0]-x[2][3]=c,x[3][0]=\0;
x[2][3]内存中的后一位为\0(此可能导致程序崩溃,现在假设不崩溃);
由于对字符串进行输出时是以遇到结束标志'\0'时才结束输出的,因此对以下语句:
for(i=0;i<3;i++)
printf("%s",&x[i][i]);
会有如下输出过程(按i排列):
i==0、从x[0][0]开始输出,为:abc
i==1、从x[1][1]开始输出,为:bc
i==2、从x[2][2]开始输出,为:c
解毕。
第2个回答  2011-01-10
输出的&x[i][i]是字符串,它是遇到'\0'结尾的。即分别从a,b,c开始输出,遇到'\0'结束了。
相似回答