您的位置:首页 > 其它

用指针访问多维数组中的元素

2015-02-09 19:30 253 查看

指针访问多维数组中的元素

如下数组,如何用指针访问
daytab[1][2]
这个元素呢?

char daytab[][12]={
{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}
};


  对这样一个数组中的元素进行访问,我们可以采用下标的形式,比如
daytab[0][1]
这就得到第一行第一列的元素31。而如果我们希望像一维数组一样采用指针来访问元素的时候该怎么办呢?

  首先这里的
daytab
是数组名,同时也如同一维数组一样是一个指针,而这里
daytab
是指向一个有12个元素的数组的指针,也就是说
*daytab
指向上面的二维数组的第一行。

  其实并没有多维数组,准确来说应该是数组的数组。所以上面的数组
daytab
就是一个有2个元素的数组,而它的元素是有12个元素的数组。对于这样的多维数组我们只要把握住这一点就行了,那就是多维数组就是数组的数组。

  

  现在我们要用指针的方法访问daytab[1][2]这个元素,该怎么做呢?

  

  
daytab[1][2]
这个元素按照上面的说法,它在
daytab
这个数组的第二个元素中包含着。(daytab是有两个元素的数组)所以我们先得到第二个元素,按照一维数组的做法第二个元素可以用这样的方式得到:
*(daytab+1)


  
daytab
的第二个元素是一个数组,而我们要访问的元素是这个数组的第三个元素,所以可以按照这样的方式得到它:
*((*(daytab+1))+2)
按照优先级可以去掉一些括号,成为
*(*(daytab+1)+2)


 常常犯的错误是将这个二位数组简单的看作是一维数组按照一定长度截断得到的,所以用下面这样的方法访问元素
*(daytab+12+2)
,这样的想法其实是把这个二维数组看成了有24个元素的一维数组,其实并不是这样。这里的daytab的类型不是char *,而是
char (*)[12]
(指向有12个char类型元素的数组的指针)。

  要想按照
*(daytab+12+2)
这个方法,就必须要将daytab转换为int*类型。
char *dt = (char*)daytab;
,这样
*(dt+12+2)
的值就是
daytab[1][2]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: