用指针访问多维数组中的元素
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]。
相关文章推荐
- 多维数组元素的下标引用于指针访问
- 采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出
- 指针访问多维数组
- 指针访问方式从键盘给数组 a[N]输入数据, 然后对元素值重新按逆序存放并输出
- 如何用指针来实现访问数组的元素-趣味一看
- C语言:通过指针来引用多维数组元素
- 多维数组与指针——访问数组元素的指针表达式
- 多维数组(数组的数组)及指针对其访问
- 用指针访问多维数组
- 数组指针和指针数组的区别,以及如何利用他们访问数组里面的元素
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
- 数组,结构体,结构体数组的差别 (使用指针访问元素时)
- 采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出 .
- 8--12指向多维数组元素的指针变量之指向二维数组的指针
- 访问元素:指向数组的指针与指向指针的指针
- 字符数组指针访问
- 多维数组和指针
- 对多维数组与指针的理解
- 随机访问数组中第i大的元素
- 数组 指针访问