c语言问题,不太理解,求高手指点,例子如下:

#include<stdio.h>
main()
{
char *a[]={"abcd","ef","gh","ijk"};int i;
for(i=0;i<4;i++)
printf("%c",*a[i]);
}
为什么输出是aegi?

由于
char *a[]={"abcd","ef","gh","ijk"};
那么a[0]到a[3]都是指向char类型变量的指针
分别指向:
a[0]---->"abcd"
a[1]---->"ef"
a[2]---->"gh"
a[3]---->"ijk"

那么
*a[0]到*a[3]就应该是读取这个字符中的首字符,自然就是 a e g i
输出合在一直就是

aegi
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-15
这是因为数组a中每个元素都是相应字符串的起始地址,比如 a[0]中存储的是"abcd"的起始地址,a[2]中存放的是"gh"的起始地址,而"abcd"的起始地址也是字符'a'的地址,所以*a[0]就表示a[0]指向的存储单元即字符 'a',同理,*a[3]就表示字符串"ijk"中字符'i'的存储单元所以输出结果为i
第2个回答  2014-01-15
因为char *a[](一维数组)只能一个字符一个字符地存,并且每个a[i]只能存一个字符,其余字符存不进去。比如:"abcd"只能把首字母存进去。
其实,你这个应该设立一个二维数组,a[4][4],这样就可以都输出来了。本回答被提问者采纳
第3个回答  2014-01-15
因为你的输出类型是字符型,而你的数组定义中元素为4个字符串类型数据,所以在输出时系统会默认将你字符串的首个字符串输出
第4个回答  2014-01-15
char *a[]={"abcd","ef","gh","ijk"};相当于4个字符数组;
for(i=0;i<4;i++)printf("%c",*a[i]);共执行四次;
第一次相当于printf("%c","abcd");
第二次相当于printf("%c","ef");
第三次相当于printf("%c","gh");
第四次相当于printf("%c","ijk");
相似回答