你要把这个答案分成三部分来看: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;
我来试解一下,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
解毕。
输出的&x[i][i]是字符串,它是遇到'\0'结尾的。即分别从a,b,c开始输出,遇到'\0'结束了。