CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

请教一个二维数组和指向指针的指针的问题

楼主mchman(mch_man)2005-06-02 20:14:19 在 C/C++ / C++ 语言 提问

先发一段程序:  
  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

相关问题

  • 帮忙写一下 指向 二维 数组的指针?偶搞忘了?
  • 指针*addr指向一个二维数组.不太理解。请指导.
  • 请教一个关于指向二维数组的指针的问题.
  • 如何为指向二维数组的指针分配内存呢?
  • 指向数组的指针数组……
  • 用指针表示二维数组?
  • 在VC中如何向函数传递指向二维/多维数组的指针?一定加分!
  • 二维数组与二维指针的赋值问题!
  • 关于指向数组的指针
  • 关于指针的指针和二维数组的疑问

关键词

  • 指针
  • carray
  • 指向
  • 二维数组
  • 数组
  • parray
  • func
  • strcpy
  • 概念
  • 关系

得分解答快速导航

  • 帖主:mchman

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo