欢迎光临散文网 会员登陆 & 注册

C++学习记录01:数组指针

2023-08-24 20:23 作者:随风飘纸片人  | 我要投稿

    最近起了学点编程的念头,网上的教程看到数组指针的时候感觉有点绕,在此梳理一下笔记,难免会有错误,仅供以后回顾。

    首先C中的数组、行、元素都可以笼统地当成“元素”,每个元素都有“值”与“地址”两个基本属性,例如二维数组:

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

    其中a == &a[0] ,  a[0] == &a[0][0] , 除了a[0][0]这种里面放的是具体 int 值的,其余的都可以赋给指针,因为说到底里面放的都是地址,但是要注意指针的类型要与这些地址指向的数据类型相匹配。

    综上二维数组有三种定义指针的思路:

    1.指针里装行地址:

        int(*ph)[4] = a;

或者 int(*ph)[4] = &a[0];

    2.指针里装元素地址

        int* py = a[0];
或者 int* py = &a[0][0];

    3.指针里装整个数组的地址

        int(*ps)[3][4] = &a;

尝试使用上面的指针取出a[1][2]的值,按理应该为7

三种思路都可以成功取出:

操作过程发现的值得注意的点:

  1. 如果使用元素指针:给py 赋值a[0] 或者 &a[0][0]后 则指针只能在第一行偏移,无法通过偏移找到a[1][2], 需要一开始赋 a[1] 或者 &a[1][0] 。

  2. 到了元素层级不能使用下标来偏移:b = *(ph[1] + 2)可以,b = *(ph[1][2])不行。c = *(py + 2)可以,c = *py[2]不行。

  3. 给指针赋值的时候貌似怎么偏移都不行,py = *(ph + 1)不行,py = ph[1]也不行。





C++学习记录01:数组指针的评论 (共 条)

分享到微博请遵守国家法律