c语言指针数组的问题

char *p[3] = {"abcde","fghi","jklmdkf"};
这句话中p代表什么,*p代表什么,为什么我想输出第一个字符串时%s对应的需要写成*p,而不是p

*p[3]指的是一个指针数组,是一个数组,数组存放的是什么呢?是指向char类型的指针。也就是说此数组有三个空间,分别存储字符串“abcde”中的第一个字符的地址,也就是a的地址。“fghi”中的第一个字符的地址,也就是f的地址。“jklmdkf”中的第一个字符的地址,也就是j的地址。然而*p又表示数组的首地址,所以*p也就是第一个字符串了;*(p++)则表示第二个字符串的首地址;
而p则表示指向char类型指针本身;这样说不知道你能明白不!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-30
因为p[3]是个数组 含有三个元素 char *则表明其为指针数组 即这个数组里面的元素是有指针组成 这三个指针分别指向字符串"abcde","fghi","jklmdkf”,因为*P代表的是指向"abcde"的指针也是p[0] 例如main{char *f="abcdest";printf("%s",f);}输出结果;abcdest 上面*P等同于f
第2个回答  2013-05-30

个人理解,我也是新手:

 

    p、&p[0]、&a  这3个等价,都是数组的首地址

    *p代表p[0]的值,就是字符串"abcde"

    输出第一个字符串,%s对应*p(*p是p[0]的值)是不会错

    但为什么不能写成p(p是p[0]的首地址),这个我也不明白。

第3个回答  2013-05-30
p[3]表明是数组,*p[3]表明是指针的数组(每个元素都是指针)
*p 与 p[0]等价
int i;
char *p[3] = {"abcde","fghi","jklmdkf"};

char **q = p;
for(i = 0; i < 3; ++i, ++q) printf("%s\n",*q); // 输出三个字符串本回答被提问者和网友采纳
第4个回答  2013-05-30
*p[3]是指针数组地址。p[3]是数组懂吧。

输出时不需要指针地址了,因为已经调用。
相似回答