当前位置:   article > 正文

C语言如何实现⼆级指针对⼆维数组的操作?

C语言如何实现⼆级指针对⼆维数组的操作?

一、问题

        如何操作⼆维数组?

二、解笞

        要更清楚地了解⼆维数组的指针,⾸先要掌握⼆维数组数据结构的特性。⼆维数组可以看成是元素值为⼀维数组的数组。假设有⼀个 3 ⾏ 4 列的⼆维数组a,它定义为:

int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

        a 是数组名。a 数组包含3⾏,即 3 个元素:即 a[0]、a[1]、a[2]。⽽每个元素又是⼀个包含4 个元素的⼀维数组。同⼀维数组⼀样,a 的值为数组⾸元素地址值,⽽这⾥的⾸元素为 4 个元素组成的⼀维数组。

        因此,从⼆维数组角度看,a 代表的是⾸⾏的⾸地址。 a+1 代表的是第⼀⾏的⾸地址。a[0]+0 可以表示为 &a[0][0],即⾸⾏⾸元素地址;a[0]+1 可以表示为 &a[0][1] ,即⾸⾏第⼆个元素的地址。

        使⽤指针指向数组时,在⼀维数组中 a[0] 与 *a[o] 等价,a[1] 与 *a(+1) 等价。因此,在⼆维数组中 a[0]+1 和 *(a+0)+1 的值都是&a[0][1],如下图中地址1002,a[1]+2 和 *(a+1)+2 的值都是 &a[1][2],如下图中的地址1012。

         下⾯再来看⼀个实例程序。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
  5. printf("%d,%d\n", a, *a);
  6. printf("%d,%d\n", a[0], *(a + 0));
  7. printf("%d,%d\n", &a[0], &a[0][0]);
  8. printf("%d,%d\n", a[1], a + 1);
  9. printf("%d,%d\n", &a[1][0], *(a + 1) + 0);
  10. printf("%d,%d\n", a[1][1], *(*(a + 1) + 1));
  11. return 0;
  12. }

三、总结

        上⾯实例程序中给出了对⼆维数组的基本操作,那么我们可以根据这些基本操作的组合作出更⾼级的操作。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/528491
推荐阅读
相关标签
  

闽ICP备14008679号