一个关于C++指针的问题

#include<iostream.h>
void main()
{int i;
char *name[]={"Turbo C","Visual C++","Borland C++"};
char **p;
cout<<"第1遍输出:"<<endl;
for(i=0;i<3;i++)
{p=name+i;
cout<<*p<<"\n";
}
cout<<"第2遍输出:"<<endl;
for(i=0;i<3;i++)
cout<<name[i]<<endl;
}
char **p是什么意思?

char p; p是字符型变量
char *p; *p是字符型变量,那么p呢?升级,p是指向*p的指针,这个不需多言
char **p; 根据上面递推,**p同理是字符弄变量(不理解的话假设**p为a,char a是什么?字符型变量啊),那么*p呢,升级(同上减*就升级),*p是指向字符型变量的指针,p呢,再升级,p是指向*p的指针,也就是说,char **p是指向字符变量指针的的指针。追问

字符数组名name是指针的指针吗?

追答

你可以把name当成是一个指针的指针,但是name是一个常量,它的值不能改变。
任何数组的数组名存的都一个指向数组首地址的地址值,这个值不能被改变,而LZ代码中,name数组里存的都是指针,那么name可以当成是指针的指针,与普通指针的指针差别就在于值不可写。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-15
是指向字符串指针的指针,在此例中 name是指向字符串数组中首元素的地址,也就是name是一个指针,而**p的作用是指向name这个地址的地址,也就是说,p里面存的元素是一个地址,这个地址是一个指向字符串的地址,所以p就是一个指向字符串地址的地址。追问

name是指针的指针吗?

追答

name不是,你可以这样理解(char*)name[]={"Turbo C","Visual C++","Borland C++"};name是一个数组名字,而这个数组中的元素类型为(char*)也就是数组元素类型为字符串。

第2个回答  2011-12-15
p是int型指针变量,指向数组a的第一个元素,也2L能解释你的,3L解释我的可以。但是矛盾啊 关注此问题
第3个回答  2011-12-15
二维指针,就是指向指针的指针。可以指向二维字符数组,也可以指向字符数组的指针。实际上字符数组名就是这个数组的头指针。这个你可以看下C语言的指针和数字部分
第4个回答  2011-12-15
char **是指向字符型指针的指针。跟 char * name[] 属于同类型。
第5个回答  2011-12-15
char **p;是二级指针,它是指向指针的指针
name在这是指针数组,它的每个元素都是各个字符串的地址(即指针),想要指向各个指针,当然要设置p为二级指针才能指向它们。追问

name是指针的指针吗?

相似回答