指针数组与二级指针问题

#include<stdio.h>
main()
{
int i;
char **p;
char *month[]=
{
"January(一月)",
"February(二月)",
"March(三月)",
"April(四月)",
"May(五月)",
"June(六月)",
"July(七月)",
"August(八月)",
"September(九月)",
"October(十月)",
"November(十一月)",
"December(十二月)"
};
for(i=0;i<12;i++)
{
p=month+i; //我的疑问在这里,为什么二级指针p和month可以关联
printf("%s\n",*p); //*p 代表的是什么 指的是第一个字符的地址还是指的每行的首地址
}
}
谢谢大家~

一级指针指向地址,二级指针指向地址的地址。
*month[]是指针数组,所以要用二级指针**p指向它。
如果单单是month[]数组,那就用一级指针*p指向它。
你这个程序里的*p代表分别输出指针数组里的值。
printf("%s\n",*p); 这条语句里的*p可以用month[i]替换。

希望能帮到你。追问

为什么是指针数组就要用二级指针**p指向它?这点不是很明白

一般情况指针指的是一个地址,比如int a,*p; p=&a;
既然二级指针指向地址的地址,那么month为什么是一个地址?

追答

C语言规定,数组名是一个地址。

一般情况下,指针指向一个地址,但也有不一般的情况,就是指针可以指向一个地址的地址。
不知道这么说你是否能理解。下面有几个链接,可以去看看,一起学习吧:
http://blog.csdn.net/code_crash/article/details/4855018
http://blog.csdn.net/djl4104804/article/details/7165512
http://www.cppblog.com/cxiaojia/archive/2011/12/23/shuzuming.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-09
month本身也是个二级指针,指向指针数组的首元素month[0],month[0]存储的是指向一月份的指针;*p还是一个指针,指向字符串的第一个字符,由于使用%s输出,所以输出整串字符。追问

不是很懂 p是一个二级指针,那么是指针的指针,也应该指向一个地址,这点应该没错吧?

比如指针定义 int a,*p; p=&a;

那么month如果是一个二级指针,为什么二级指针指向二级指针 而不指向地址呢?

相似回答