char** p 谁能给我解释一下这个是什么意思?

char** p 谁能给我解释一下这个是什么意思?
请尽量详细一点!
还有什么时候才需要动态分配空间?

char p是声明一个字符类型变量p,char * p1是声明一个字符类型的指针变量p1,那么char ** p2就相当与给char类型的指针变量再声明一个指针.(2级指针)

举个例子,假如:
char p='a';//假设声明了p后,p在内存的1000处,则&p=1000(&为取变量首地址)
char * p1=&p;//则p1=1000,*p1=p='a',p1就和p关联了;假设p1被放在2000处
char ** p2=&p1;//则p2=2000,*p2=p1=&p=1000,**p2=&p1=p='a'

在说通俗点,你去超市买东西要先存包,存包的时候给你个手牌.这个时候变量p='a'就相当与你的包,它被放在1000号的箱子里,而你手里的号码牌写着"1000"就相当与p1,也就是p(你的包)的指针.....如果你的号码牌还要存到另外一个号为2000的箱子里,那这个2000的号码牌就成了第一个牌子的指针.

不知道说明白没有,在使用链结构的时候动态分配内存,一般是数据量变化比较大而且范围不好确定的时候.少的时候可能需要2个字节的空间,大的时候可能超过几十MB,这时就不适合直接分配那么大的空间,而应该动态的分配,用多少给多少.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-03-20
char *是字符数组,在C/C++中常用于表示字符串(因为它们没有字符串类型)。

char **是字符数组的数组,即字符串数组。
第2个回答  2007-03-20
这是定义了一个指向指针的指针, 你可以叫它二级指针.
需要的时候就分配呗, 你没有这个需求的时候最后就不要研究这个问题, 否则即使你懂了, 你也不会用, 等你有动态分配的需求时, 你自然就懂了.
第3个回答  2013-05-23
char ***p的话,*p是一个char**指针,**p是一个char*指针,***p是一个char
第4个回答  2007-03-20
指向字符指针(char*)的指针。
在编译期无法决定空间大小的时候。