搜索
查看: 1770|回复: 7
打印 上一主题 下一主题

关于指向二维数组的指针问题。

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-30 23:15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
本帖最后由 YinhuangLe 于 2013-3-30 23:26 编辑

题目要求如下:

      声明一个每维长度都为12的二维数组,并将X存储到每个元素中,然后使用一个指向该数组的指针,
以网格方式将数组中的值打印到屏幕上。

最开始,我是这样完成的:

      int main()
      {
            char arr[12][12];
            char (*p)[12];
            int i,j;
            for (i=0;i<12;i++)
                  for (j=0;j<12;j++)
                       arr
[j] = 'X';
            for (i=0;i<12;i++)
            {
                  p = arr
;
            for (j=0;j<12;j++)
                  {
                        printf("%c", *p);
                  }
                  printf("\n");
            }
            return 0;
      }


      这样的情况下,打印出来的是乱码。求指教
沙发
发表于 2013-3-30 23:15:32 | 只看该作者
  1. #include <stdio.h>
  2. int main()
  3.       {
  4.             char arr[12][12];
  5.             char (*p)[12];
  6.             int i,j;
  7.             for (i=0;i<12;i++)
  8.                   for (j=0;j<12;j++)
  9.                        arr[i][j] = 'X';
  10.             for (i=0;i<12;i++)
  11.             {
  12.                   p = arr;
  13.             for (j=0;j<12;j++)
  14.                   {
  15.                         printf("%c", *(p[j]));
  16.                   }
  17.                   printf("\n");
  18.             }
  19.             return 0;
  20.       }
复制代码
板凳
 楼主| 发表于 2013-3-30 23:25:01 | 只看该作者

RE: 关于指向二维数组的指针问题。(已解决)

自己已经研究好了。谢谢大家关注
地板
发表于 2013-4-1 11:11:40 | 只看该作者
表示和楼主不是以一个档次的  看不懂
5#
 楼主| 发表于 2013-4-7 10:54:04 | 只看该作者
rosynirvana 发表于 2013-3-31 00:18

你这样的代码块是怎么写的?
6#
 楼主| 发表于 2013-4-7 11:01:04 | 只看该作者
rosynirvana 发表于 2013-3-30 23:15

可否详细解释下代码第15行中*(p[j])的含义。我的理解是:开始声明了p是指向一个具有12个元素数组的指针,那么,其实在给你回答的时候,自己已经懂了。但是这样貌似没有按照题目的要求,题目要求是指向二维数组的指针。而不是一维
7#
 楼主| 发表于 2013-4-7 11:01:19 | 只看该作者
julius 发表于 2013-4-1 11:11
表示和楼主不是以一个档次的  看不懂

我也很菜的。谢谢关注
8#
发表于 2013-4-7 12:41:58 | 只看该作者
YinhuangLe 发表于 2013-4-7 11:01
可否详细解释下代码第15行中*(p[j])的含义。我的理解是:开始声明了p是指向一个具有12个元素数组的指针, ...

每一行的第一个元素,或者写成**(p+j)
当初我不知道你想要做什么,现在看来或许是遍历整个数组?
那应该写成
  1. p = arr;
  2.             for(i = 0; i < 12; ++i){
  3.                 for(j = 0; j < 12; ++j)
  4.                     printf("%c ", *(*(p+i) + j));
  5.                 printf("\n");
  6.             }
复制代码
其实也就等价于写p[j]

C中的多维数组本质上就是一维数组,所以有时用指针的时候看上去像降了一维
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表