数组指针:存放多维数组首地址的变量
关于数组指针这里,最容易混淆的就是数组指针和指针数组。因此,我们需要清楚指针和数组。
指针我们在上一篇文章中已经讲解过了,在这里不过多解释。
数组:同一数据类型的集合。
在c语言里面,数组的定义方式为:
元素数据类型 数组名 [ 元素个数 ] ;
如下:
int arr[4] = {0}; // 一维数组
数组除开数据类型不同以外,分为一维数组、二维数组、三维数组……。一个“ [ ] ”表示一维,如下:
int brr[3][4] = {0}; // 二维数组
int crr[2][3][4] = {0}; // 三维数组
而二维数组及二维以上的数组被称为 “ 多维数组 ” 。
int brr[3][4] = {0}; // 二维数组
指针数组:元素类型为指针的数组。
如下:
int* p[4] = {0}; // 整型指针数组
每个元素的类型为int * ,因此为整型指针组成的数组。
char* p1[3][4] = {0}; // 字符串二维数组
每个元素的类型为char * ,因此为字符串二维数组。
struct node *p2[4] = {0}; // 结构体指针数组
每个元素的类型为struct node * ,因此为结构体指针数组。
数组指针:存放多维数组首地址的指针。
int arr[3][4] = {0}; // arr数组有3行4列
int (*p)[4] = arr; // 数组指针,存放数组arr的首地址
因为数组指针是将多维数组的第一维及数组名以指针替换,所以可以将数组指针看作如下:
int brr[3][4] = {0};
int (*p)[4] = brr;
// 可以理解为:int (*)[4] p = brr;
// p为变量名,int (*)[4]为数据类型
数组指针与指针数组的区别为,一个为指针,一个为数组,以后两个字作为标准。
如果“ * ”在括号之内,则指针优先级高一些,即为数组指针:
int (*p)[4];
没有括号或在括号外面,数组优先级高则为指针数组:
int *arr[4];
一级指针可以存放一维数组地址,数组指针用于存放多维数组首地址。