CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

关于指针的指针和二维数组的疑问

楼主windxnet(南风)2005-09-08 15:46:50 在 C/C++ / C语言 提问

书上说,二维数组名就是指针的指针。数组名是指向二维数组的行地址存储空间的首地址,也就是指针数组。那么:  
   
  int   a[3][3]   =   {1,2,3,4,5,6,7,8,9};  
   
  a   ->   a[0]   a[1]   a[2]  
   
    a[0]->       1   2   3  
    a[1]->       4   5   6  
    a[2]->       7   8   9  
   
  如果:  
   
  int   **p;  
  p   =   a;  
   
  为什么P就能等价于a了呢?我真的是想不明白。请指教。 问题点数:20、回复次数:12Top

1 楼bugebear3(bug)回复于 2005-09-08 16:01:51 得分 0

二维数组名就是指针的指针,  
  而p是int   **,当然可以p   =   a;了Top

2 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2005-09-08 16:05:49 得分 0

P与A的区别在于,一个是常量,一个是变量  
  Top

3 楼lxb365(to be loved)回复于 2005-09-08 16:15:06 得分 0

*p和一维数组a的关系,跟**p和二维数组的关系差不多  
  既然  
  int   a[];  
  int   *p;  
  p=a;       成立,  
  那么  
  int   a[][];  
  int   **p;  
  p=a;       也成立  
   
   
  Top

4 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-09-08 16:45:05 得分 0

楼主是错的。  
   
  那个p跟a是不同的,类型不一样,直接p=a的话肯定会产生warning:suspicous   pointer   conversion的。  
   
  p得这样定义:int   (*p)[3],才能p=a;Top

5 楼snowbirdfly(专心搞好嵌入式~~~)回复于 2005-09-08 17:00:11 得分 0

是啊~  
  支持楼上说法~~  
  还有一点是  
  a为常量,p为指针变量~~~  
  不能对a进行加减运算~~  
  而p可以~~~  
  Top

6 楼copygirl(wa!)回复于 2005-09-08 17:58:00 得分 10

int   aa[2][2]={1,2,3,4};  
  int   *p;  
  因为二维数组是线性结构,可以把它看成一维数组,aa[4]={1,2,3,4};  
  这时,p=aa,p指向的是aa中的第一个元素,所以*p=1;  
  同理,*(p+1)=2;,*(p+2)=3;,*(p+3)=4;  
   
  如果想告诉编译器,p指向的空间是一个二维空间,则可以构造一个二维指针数组,每个指针指向二维数组中的一个元素:int   *p[2][2](不带括号相当于   int   *(p[2][2])   ),此时,用p[0][0]=aa,表示将aa数组中的第一个元素的地址赋给p指针数组中的第一个指针,于是,打印*p[0][0],就可以打印出1Top

7 楼daniel_zwn(小兵)回复于 2005-09-08 18:41:33 得分 0

main()  
  {  
  int   a[3][3]   =   {1,2,3,4,5,6,7,8,9};  
  int   *p;  
  p=a;  
   
  printf("%d",*p);  
  }  
  事实证明二维数组只是一维线性表,例子中将打印1;支持楼上.Top

8 楼bugebear3(bug)回复于 2005-09-08 19:27:05 得分 0

楼上的不对哟:  
   
   
  error   C2440:   '='   :   cannot   convert   from   'int   [3][3]'   to   'int   *'Top

9 楼lxk_cool()回复于 2005-09-08 23:12:07 得分 0

应该是p=&a[0][0]吧.....Top

10 楼gzlyb(冰风)回复于 2005-09-08 23:21:44 得分 0

指针和数组名的调用方法都不一样  
  指针是要先取得指针值,再根据这个值去访问所指向的变量值  
  而数组名是直接取变量值  
  Top

11 楼daniel_zwn(小兵)回复于 2005-09-11 22:43:54 得分 0

我用TC运行的,程序没有问题Top

12 楼Basin_Fish(心碎de青蛙)回复于 2005-09-11 23:06:00 得分 10

to   copygirl(wa!)    
   
  为何要定义个二维的指针数组,定义一个一维的指针数组对二维数组进行行的操作  
  int   *a[3];  
  int   aa[3][5];  
  a[0]=aa[0][0];  
  a[1]=aa[1][0];  
  a[2]=aa[2][0];  
   
  a[0]->aa[0][0]       aa[0][1]     aa[0][2]     aa[0][3]     aa[0][4]  
  a[1]->aa[1][0].....  
  a[2]->aa[2][0]  
   
  Top

相关问题

  • 指针数组的疑问
  • 用指针表示二维数组?
  • 二维数组与二维指针的赋值问题!
  • 二级指针 如何转换成 二维数组的指针?
  • 请问指针的指针,二维数组,指针数组,之间有何区别
  • 一个二维数组串指针作参数问题
  • 请问如何返回一个二维数组的指针?
  • 请问双重指针如何操作二维数组?
  • 怎样返回一个二维数组的头指针
  • 怎样返回一个二维数组的头指针

关键词

  • 指针
  • 打印
  • 数组
  • 二维
  • aa
  • 变量
  • 指向
  • 元素
  • 地址
  • 空间

得分解答快速导航

  • 帖主:windxnet
  • copygirl
  • Basin_Fish

相关链接

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

广告也精彩

反馈

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