C++学习记录01:数组指针
最近起了学点编程的念头,网上的教程看到数组指针的时候感觉有点绕,在此梳理一下笔记,难免会有错误,仅供以后回顾。
首先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

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

操作过程发现的值得注意的点:
如果使用元素指针:给py 赋值a[0] 或者 &a[0][0]后 则指针只能在第一行偏移,无法通过偏移找到a[1][2], 需要一开始赋 a[1] 或者 &a[1][0] 。
到了元素层级不能使用下标来偏移:b = *(ph[1] + 2)可以,b = *(ph[1][2])不行。c = *(py + 2)可以,c = *py[2]不行。
给指针赋值的时候貌似怎么偏移都不行,py = *(ph + 1)不行,py = ph[1]也不行。