请教一个二维数组和指向指针的指针的问题
先发一段程序:
void func(char **pArray)
{
.....
}
int main()
{
char cArray[10][10];
strcpy(cArray[0],"hello1");
strcpy(cArray[1],"hello2");
.....
//调用func
func(cArray); ----->此处编译出错,类型不匹配
}
一个是指向指针的指针,一个是二维数组,我感觉cArray应该也是一个指向指针的指针,但编译器报错,我使用func(&cArray)也是不行,对二维数组和指向指针的指针之间的关系,我一直不太清楚,请教哪位兄弟能帮我解释一下。
以上程序,我后来使用如下办法解决的
int main()
{
char *pArray[10];
pArray[0]=new char[10];
pArray[1]=new char[10];
...
strcpy(.....)
}
问题点数:0、回复次数:10Top
1 楼sunman1982(冥王星)回复于 2005-06-02 20:16:42 得分 0
我得理解是:cArray应该也是一个指向指针的指针,但是他指向的是cArray[0][0];Top
2 楼CMyMfc(星际人生:=E.F=FlyForEver)回复于 2005-06-02 20:21:25 得分 0
func(char pArray[][10])就行了Top
3 楼foochow(无聊,灌水......)回复于 2005-06-02 20:43:41 得分 0
void func(char pArray[][10])同楼上-_-
{
.....
}
Top
4 楼mostideal(三甲)回复于 2005-06-02 21:15:53 得分 0
也同意楼上的。。Top
5 楼czg516(伟大的程序员从一点一滴做起)回复于 2005-06-02 22:38:02 得分 0
多纬数组和指向指针的指针没有任何关系.
cahr **p和char p[][],不是一个概念.
指针定义和运用时概念不一样.
如果
char *p={"sdasd","sdasd"}
此时的**p==p[0][0],但这个**p并不是指向指针的指针
楼主
void func(char **pArray)//这个pArray是指向指针的指针
{
.....
}
int main()
{
char cArray[10][10];//单纯的2二维数组
strcpy(cArray[0],"hello1");cArray[0]和*cArray是一个概念,
strcpy(cArray[1],"hello2");
func(cArray);//因为里面的型参pArray是指向指针的指针,而cArray只是一个数组(也可以说是一个指针,但不是指向指针的指针),所以会发生类型匹配出错.
Top
6 楼defyer007(深入浅出)回复于 2005-06-02 22:48:19 得分 0
对二维数组和指向指针的指针之间的关系,我一直不太清楚
=======================================================
数组的名称相当于一个指针,指向这个数组开始的位置(在内存中)
而指向指针的指针,则是一个(二维)指针,它指向内存中的一个地址,而这个地址的内容又是另一个地址,这个地址又指向内存中的另一个地方Top
7 楼defyer007(深入浅出)回复于 2005-06-02 22:50:04 得分 0
忘了说了,现在的编译器大部分都是将数组按行排列,你去看看随便哪本编译原理的书中都有叙述Top
8 楼zdy_8212(zdy_8212)回复于 2005-06-03 01:29:19 得分 0
数组名是首指,**P指定的是某个二维空间的位址,不一样Top
9 楼mchman(mch_man)回复于 2005-06-07 16:45:54 得分 0
非常感谢大家
问题的出现是因为那个func(char **)函数是调用别人的接口,痛苦啊,每次要我分配空间,最苦恼的是,这个分配空间操作特别频繁,最后只好用了一个静态的static char *pArray[10];在程序初始化的时候分配空间
看了上面的帖子,让我豁然开朗,非常感谢大家Top
10 楼xzgyb(老达摩)回复于 2005-06-07 17:16:01 得分 0
如果
在 void func(char **pArray)
中不需要修改pArray指向的内容
这样声明
char * ar[ 2 ] = { "hello1", "hello2" };
func( ar );
也可
Top




