目录
前言
之前有编写过关于 指针数组 的相关知识
C语言 ——— 指针数组 & 指针数组模拟二维整型数组-CSDN博客
指针数组 顾名思义就是 存放指针的数组
那什么是数组指针呢?
数组指针的定义
何为数组指针?
类比:
整型指针 —— 指向 整型变量 的指针,存放 的是 整型变量 的 地址
字符指针 —— 指向 字符变量 的指针,存放 的是 字符变量 的 地址
那么
数组指针 —— 指向 数组 的指针,存放 的是 数组 的 地址
数组指针的正确存放代码演示:
int arr[5] = { 1,2,3,4,5 };
// 数组指针
int(*parr)[5] = &arr;
代码解析:
解析:int(*parr)[5] = &arr;
取地址数组名(&arr),取出的是整个数组的大小
有关数组名的相关知识请见:C语言 ——— 对于数组名的理解-CSDN博客
(*parr) : parr 是一个 指针
int [5] : parr指针 的 类型
int(*parr)[5] :去掉 parr指针,剩下的就是 parr指针 的类型,所以 parr 是 数组指针变量
注意:"[]" 的优先级高于 "*" 号,所以 *parr 要加上括号
数组指针的使用
数组指针 可使用于 二维数组传参时,用 数组指针 来 接收
代码演示:
#include<stdio.h>
void PrintArr(int(*parr)[5], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf("%d ", *((*(parr + i)) + j));
}
printf("\n");
}
}
int main()
{
int arr[3][5] = { 1,2,3,4,5,
2,3,4,5,6,
3,4,5,6,7 };
// 打印二维数组的每个元素
PrintArr(arr, 3, 5);
return 0;
}
代码解析:
一维数组的数组名 是 首元素地址,那么 二维数组的数组名 也是 首元素地址
二维数组的首元素地址 是 第一行的整个元素,所以 二维数组首元素的地址 就是 一个一维数组
所以将 二维数组arr 传参时,用的是 数组指针接收
解析:*((*(parr + i)) + j)
(parr + i):遍历每一行的数组
(*(parr + i)):等价于:*&arr,* 和 & 相互抵消,所以 (*(parr + i)) 可以看作 arr数组名
*((*(parr + i)) + j):利用上面的等价 *((*(parr + i)) + j) 等价于 *((*arr + j)
这样就能遍历二维数组中的每个元素
代码验证: