指针数组和数组指针解析

指针数组

  • 指针数组的本质是一个数组,一定要清楚数组。

  • 数组的特点
    1.数组是相同数据类型的元素的集合。
    2.数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
    3.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。

  • 例如:int *p[4]
    这就是一个指针数组,[]优先级高于 * ,所以先和数组结合,既然是指针数组。那么指针数组中的每一个元素均为指针,即int *p[4]中,数组元素均为指针,因此p[i]是指第i+1个元素的指针。

数组指针

  • 数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动)
    数组指针(也称行指针)

  • 定义 int (*p)[n];
    ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

    如要将二维数组赋给一指针,应这样赋值:
    int a[3][4];
    int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
    p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
    p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

    所以数组指针也称指向一维数组的指针,亦称行指针。

猜你喜欢

转载自blog.csdn.net/apanying/article/details/86300798