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

请教:二位数组、指针、指针数组以及指向数组的指针

楼主cinhwa(笑*_*笑)2006-03-15 00:59:27 在 C/C++ / C语言 提问

写了如下代码,想弄清楚二位数组如何用指针、指针数组以及指向数组的指针去依次读取。  
  代码编译通过,运行结构符合期望,他们之间的关系似懂非懂。  
   
  /*  
  构造二位数组,依次引入指向数组的指针、指针数组、一级指针变量,遍历之。  
  */  
  #include   <stdio.h>  
  #include   <stdlib.h>  
  #define   M   3                                     //   数组的行数              
  #define   N   2                                     //   数组的列数  
  int   main()                          
  {  
          int   a[M][N],i,j;  
          int   (*q)[N];                           //     指向数组的指针       注意这里的M,N与数组的M,N的对应  
          int   *t[M];                               //     指针数组                   请问,为什么是这样子的?  
          int   *p;                                     //     指针                           就是说,int   (*q)[x]中的x必须不小于N  
                                                            //                                       int   *t[x]中的y必须不小于M,为什么?  
          for   (i=0;i<M;i++)  
                  for   (j=0;j<N;j++)  
                          scanf("%d",&a[i][j]);  
   
          for   (i=0,printf("\n原数组为:\n");i<M;i++)  
                  for   (j=0,printf("\n");j<N;j++)  
                          printf("%d   ",a[i][j]);  
   
          for   (i=0;i<M;i++)  
                  for   (j=0,t[i]=a[i];j<N;j++)  
                          printf("\n指针数组:*(t[%d]+%d)=%d",i,j,*(t[i]+j));  
   
   
          for   (i=0,q=a;i<M;i++)  
                  for   (j=0;j<N;j++)  
                          printf("\n指向数组的指针:*((*q+%d)+%d)=%d",i,j,*(*(q+i)+j));  
   
          for   (i=0,p=a[0];i<M*N;i++)  
                  printf("\n指针:p+%d=   %d",i,*(p+i));  
   
          system("PAUSE");  
  }  
  问题点数:10、回复次数:7Top

1 楼cinhwa(笑*_*笑)回复于 2006-03-15 01:03:03 得分 0

问题见右文:  
        int   (*q)[N];                           //     指向数组的指针       注意这里的M,N与数组的M,N的对应  
          int   *t[M];                               //     指针数组                   请问,为什么是这样子的?  
          int   *p;                                     //     指针                           就是说,int   (*q)[x]中的x必须不小于N  
                                                            //                                       int   *t[x]中的y必须不小于M,为什么?  
  Top

2 楼citywanderer2005(流浪狗)回复于 2006-03-15 09:25:19 得分 10

1、“就是说,int   (*q)[x]中的x必须不小于N”  
  这就话有错,应该是x必须等于N,如果q   =   a的话,q++就相当于地址移动sizeof(int)*N。Top

3 楼citywanderer2005(流浪狗)回复于 2006-03-15 09:29:43 得分 0

2、   int   *t[x]  
  表示t是一个含有x个指向int类型的指针元素的数组,其中每一个指针元素都指向一个int   a[N]的数组,当然x==M拉  
  ------  
  哈哈,不知道说的清楚不Top

4 楼ytfrdfiw()回复于 2006-03-15 10:01:25 得分 0

说得好Top

5 楼wumingchenchao(一缕阳光)回复于 2006-03-15 10:18:20 得分 0

int   *t[M];                               //     指针数组                   请问,为什么是这样子的?  
  []的优先级别比*的高,所以t先与[M]结合,形成t[M]形式,这显然是数组形式,再与前面的*结合,*表示该数组是指针型的。Top

6 楼cinhwa(笑*_*笑)回复于 2006-03-15 13:29:20 得分 0

明白,多谢多谢!!Top

7 楼cinhwa(笑*_*笑)回复于 2006-03-15 19:11:08 得分 0

明白,多谢多谢!!Top

相关问题

  • 指向数组的指针数组……
  • 关于指向数组的指针
  • 帮忙写一下 指向 二维 数组的指针?偶搞忘了?
  • 指针*addr指向一个二维数组.不太理解。请指导.
  • 请教一个关于指向二维数组的指针的问题.
  • 如何为指向二维数组的指针分配内存呢?
  • “指向函数指针数组的指针”怎么使用?
  • 怎么使用一个指向类中的数组的数组指针 ????急!!!!
  • 求助:指针数组指向的动态数组的内存释放问题
  • 在VC中如何向函数传递指向二维/多维数组的指针?一定加分!

关键词

  • 指针
  • 数组
  • 指向

得分解答快速导航

  • 帖主:cinhwa
  • citywanderer2005

相关链接

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

广告也精彩

反馈

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