CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

给位请教下一个指针和数组的问题

楼主geyufly(geyu)2004-05-01 23:48:23 在 C/C++ / C++ 语言 提问

int   a[0][0];  
  int   (*p)[3];  
  p=&a[0][0];p=a[0];为什么不正确??而  
  p=&a[0]却是正确的?不是说a[0]和a都是表示数组的首地址吗?还有&a[0][0]不能表示它的首地址吗?  
  p=a没问题这我能理解  
  谢谢了  
   
   
  问题点数:50、回复次数:19Top

1 楼yl888(yanglei_tc)回复于 2004-05-02 00:03:25 得分 0

你定义的   p   是指向数组的指针,它的每个元数都应该是个地址;  
  int   a[0][0]   能这么定义吗?  
  Top

2 楼antijpn(antijpn)回复于 2004-05-02 00:07:29 得分 0

p是指向数组的指针,&a[0][0]是一个指向int型数据的指针,当然是不行的了  
   
  而a[0]是一个一维数组,当然也就不能赋给p了  
   
  而&a[0]是一个一维数组的地址,自然也就可以了Top

3 楼antijpn(antijpn)回复于 2004-05-02 00:08:38 得分 0

其实上面的两个代码在C里面都能通过,而在C++里面,这些代码都不能通过Top

4 楼mistysunlight(为裤叉奋斗)回复于 2004-05-02 00:50:59 得分 0

int   a[0][0];  
  int   (*p)[3];  
  p=&a[0][0];p=a[0];为什么不正确??而  
  p=&a[0]却是正确的?不是说a[0]和a都是表示数组的首地址吗?还有&a[0][0]不能表示它的首地址吗?  
  ---------------------  
  以上是引用!  
  ---------------------  
  不过int   a[0][0];不知道作者是什么意思,如果是初始化还可以,如果是定义数组就错了!  
                                数组的首地址:p-->     a[0][0]   a[0][1]   a[0][2]  
                                                                        a[1][0]   a[1][1]   a[1][2]  
                                                                        a[2][0]   a[2][1]   a[2][2]  
  p=&a[0][0];p=a[0];  
    p=&a[*][*]是a[*][*]中数据的地址!如果你取出其地址的话,结果可想而知是错!  
    p=a[0]就更不对了!     这里出现的是类型不匹配!前面是指针,后面是整型,能行吗?当然不行!  
  而p=&a[0]却是正确的,因为:  
                  在a[0][0]   a[0][1]   a[0][2]中   它的行地址是&a[0]而刚好也是数组的首地址!  
                    其他   如:&a[1],   &a[2]只是它所在行的首地址而已!不是数组的首地址!Top

5 楼qyet(少年心气)回复于 2004-05-02 00:55:00 得分 0

在C++中,有多种机制用来说明2维数组,但其中的很多都要求在编译时明确每一维的大小。所以要避免在参数传递时,必须指定高维大小的麻烦,一般都是用动态空间分配。  
  如这样写:  
  int   **a   =   new   int   *   [5];  
  for(int   i   =   0   ;   i   <   5   ;   i++)  
    int   a[i]   =   new   int   [5];  
  则可以看出,a[i]是第i行的首地址(第一个元素),而a本身杂是一个指向指针的指针.....  
   
  所以p=&a[0][0]应该这样写:int   *p   =   &a[0][0];  
   
   
   
  Top

6 楼cngdzhang()回复于 2004-05-02 20:35:18 得分 50

确实  
  a[0]和a还有&a[0][0]    
  都是表示数组的首地址  
   
  但是这只是表明它们的值是相同的,但是含义不一样  
   
  举个类似的例子:  
   
  long   l=100;  
  int   *ps=(int   *)&l;  
  char   *pc=(char   *pc)&l;  
   
  &l,ps,pc的值都相同,  
  但是表示的意思都不一样  
   
  a代表整个数组的首地址,  
  a[0]表示第一个一维数组的首地址(二维数组是由多个一维数组组成的)  
  &a[0][0]表示第一个元素的首地址    
   
   
  Top

7 楼geyufly(geyu)回复于 2004-05-03 17:58:28 得分 0

不好意思大错了  
  是  
  int   a[3][3]={1,2,3,4,5,6}Top

8 楼qyet(少年心气)回复于 2004-05-04 22:23:59 得分 0

一样的道理啊Top

9 楼carambo(单叶草--(***实干才有好运***))回复于 2004-05-04 23:24:31 得分 0

你定义   int   a[0][0];犯了个大错.程序应该输出的是不确定的值.Top

10 楼hewittlee(只爱C++)回复于 2004-05-05 16:35:26 得分 0

a代表整个数组的首地址,  
  a[0]表示第一个一维数组的首地址(二维数组是由多个一维数组组成的)  
  &a[0][0]表示第一个元素的首地址    
   
  Top

11 楼hewittlee(只爱C++)回复于 2004-05-05 16:38:52 得分 0

a代表整个数组的首地址,  
  a[0]表示第一个一维数组的首地址(二维数组是由多个一维数组组成的)  
  &a[0][0]表示第一个元素的首地址  
   
  而你定义p是指向一维数祖的首地址,  
  int   *p   可以指向&a[0][0],&a[0]Top

12 楼57808475(日中天)回复于 2004-05-05 20:16:59 得分 0

a[0][0]有什么用?Top

13 楼connie2003(川川)回复于 2004-05-05 21:02:22 得分 0

一句话,左右类型不匹配Top

14 楼xiaozhong(子陵)回复于 2004-05-05 22:11:02 得分 0

 
  你定义的p是行指针,只有p=&a[0],或p=a,p=a+1才是正确的,详细的可参见潭浩强的c程序设计教程Top

15 楼Alextrue(博爱)回复于 2004-05-05 23:45:33 得分 0

大家有没有看到,作者说打错了:  
  “不好意思大错了  
    是  
    int   a[3][3]={1,2,3,4,5,6}”  
  好像他的更正也不对呀。  
  一个3行*3列的二维数初始化是这样的:  
    int   a[3][3]={{1,2,3},{4,5,6},{7,8,9}};  
  Top

16 楼weixiaohua(我爱Delphi)回复于 2004-05-06 00:10:49 得分 0

a[0]是首地址的实际值!  
  &a[0]才是首地址!Top

17 楼zhouqingyuan(浪帆)回复于 2004-05-06 00:31:59 得分 0

弄懂这些数据是怎么存储的,看存储的东西是否匹配,就应该可以明白了。Top

18 楼xjl999(再生)回复于 2004-05-06 10:57:47 得分 0

int   **b   ->a  
  int   *b   ->a[0]  
  int   b->a[0][0]  
  所以  
  p   =   a   或者p   =   &a[0]  
  虽然   a,a[0],&a[0][0]是同一个值  
  其中a   和   a[0]只是右值,没有实际的存储单元Top

19 楼Carl2000(★风流子)回复于 2004-05-06 19:37:13 得分 0

dingTop

相关问题

  • 请教:二位数组、指针、指针数组以及指向数组的指针
  • 数组指针与指针数组
  • 指针与数组
  • 指针和数组
  • 数组和指针
  • 指向数组的指针数组……
  • 麻烦哪位帮我归纳一下数组和指针相比较而言各自的优缺点,谢谢!
  • 想和各位讨论一下c中指针是如何实现动态数组的。
  • 请问如何在linux (redhat)下传递一维数组指针?
  • 请问如何在linux (redhat)下传递一维数组指针?

关键词

  • c++
  • 指针
  • 数组
  • 地址
  • 正确
  • 指向
  • 定义
  • 维数组
  • 表示
  • 不能

得分解答快速导航

  • 帖主:geyufly
  • cngdzhang

相关链接

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

广告也精彩

反馈

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