欢迎来到军工软件开发人才培养基地——学到牛牛

数组指针

时间:2024-05-06 07:01:10 来源:学到牛牛

数组指针:存放多维数组首地址的变量

关于数组指针这里,最容易混淆的就是数组指针和指针数组。因此,我们需要清楚指针和数组。

指针我们在上一篇文章中已经讲解过了,在这里不过多解释。

数组:同一数据类型的集合。

在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];

 

一级指针可以存放一维数组地址,数组指针用于存放多维数组首地址。