Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43408
  • 博文数量: 4
  • 博客积分: 110
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-02 10:01
文章分类
文章存档

2012年(4)

我的朋友

分类: C/C++

2012-10-28 14:40:23

昨天在想指向函数指针数组的指针的时候,突然想知道指向数组指针的指针数组是什么样的,于是就有了今天的这篇文章。

先看代码吧:

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4. int a[2][3] = {
  5.                         {1, 2, 3},
  6.                         {11, 22, 33}
  7.                       };
  8.     
  9.      int b[2][3] = {
  10.                  {4, 5, 6},
  11.                  {44, 55, 66}
  12.                       };

  13.     int (*p[2])[3];    //指向数组指针的指针数组
  14.      
  15.         p[0] = (int (*)[])&a;
  16.         p[1] = (int (*)[])&b;

  17.         printf("%d, %d\n", p[0][1][1], p[1][1][1]);
  18.      
  19.         return 0;
  20. }

输出结果:22,55

我们来分析一下:
    假如我们现在需要一个能保存多个数组指针的指针数组,我们该怎样做?
    我们都知道 int (*)[] 是一个数组指针,它可以指向一个二维数组,要是想保存多个这样的指针,我们首先要定义一个指针数组,为什么是指针数组呢?因为我们可以通过地址来找到一个数组指针,所以只需保存它们的地址就行了,然而保存多个地址需要指针数组。
    在这里保存的是一个指向二维数组的数组指针,所以要声明为 int (*[])[] 的形式。 p[0]是一个数组指针,指向二维数组a,p[0][1]==a[1],p[0][1][1]==a[1][1], 下一句同理,所以输出结果为:22,55。
阅读(1839) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:一道概率算法题

给主人留下些什么吧!~~