- 数组指针:
数据类型 (*数组指针变量名)[列宽];- 特点:
- 1、本质上是一个
指针类型的变量; - 2、
指向的是一个二维数组,即数组指针的列宽等价于二维数组的列宽; - 例如:
c
int array[2][5] = {1,2,3,4,5,6,7,8,9,10};
int (*p)[5] = array;
- 指针数组和数组指针的区别:
- 1、指针
数组本质上是一个数组,每一个元素都是指针类型; - 2、数组
指针本质上是一个指针,指向的是一个二维数组; - 二维数组名的含义:
- 1、
array:表示二维数组的名字,数组名是一个常量,不可被修改; - 2、
array + 1:表示向后偏移二维数组的整行; - 3、
arrray[i]:表示二维数组的行对应的首地址; - 4、
array[i] + 1:表示向后偏移一个元素的大小; - 5、
array[1][4]:表示第1行第4列的元素对应的值,等价于*(array[1] + 4)和*(*(array + 1) + 4); - 6、
&array[1][4]:表示第1行第4列的元素对应的地址,且地址为int *类型,等价于*(array + 1) + 4; - 7、
*(array + 1):二维数组名前加*,降维成一维数组,表示一维数组的首地址; - 总结:
- 一、取二维数组每个元素的值:
c
二维数组名[row][col]
*(二维数组名[row] + col)
*(*(二维数组名+row) + col)
- 二、取二维数组每个元素的地址:
c
&二维数组名[row][col]
二维数组名[row] + col
*(二维数组名+row) + col
- 三、取二维数组每行的首地址:
c
二维数组名[row]
*(二维数组名 + row)
- 四、二维数组对应的每行的地址:
c
二维数组名 + row
- 数组指针变量名的含义:
- 1、
数组指针变量名表示一个行地址,可以将数组指针变量名当作二维数组名使用; - 2、可以定义一个数组指针变量指向一个二维数组,通过数组指针变量访问二维数组的每个元素;
- 一、通过数组指针变量访问指向二维数组的每个元素的值:
c
数组指针变量名[row][col]
*(数组指针变量名[row] + col)
*(*(数组指针变量名+row) + col)
- 二、通过数组指针变量访问指向二维数组的每个元素的地址:
c
&数组指针变量名[row][col]
数组指针变量名[row] + col
*(数组指针变量名+row) + col
- 三、通过数组指针变量指向二维数组的每行的首地址:
c
数组指针变量名[row]
*(数组指针变量名 + row)
- 四、通过数组指针变量指向二维数组的每行的地址:
c
数组指针变量名 + row
- 二维数组和数组指针的区别:
- 相同点:
- 1、
二维数组名和指针数组变量名都是一个行地址; - 2、可以使用
数组指针变量指向一个二维数组; - 3、两者用法基本一致;
- 不同点:
- 1、
二维数组名是一个常量,不可被修改; - 2、
数组指针变量名是一个变量,可修改数组指针的指向; - 总结:
- 若一个函数的参数是
一个二维数组时,一般使用数组指针指向一个二维数组的方式,进行二维数组参数的传递;