C语言 ——— 数组指针的定义 & 数组指针的使用

目录

前言

数组指针的定义

数组指针的使用 


前言

之前有编写过关于 指针数组 的相关知识

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) 

这样就能遍历二维数组中的每个元素 

代码验证:

相关推荐

  1. C语言指针数组 指针运算

    2024-07-23 01:10:02       65 阅读
  2. C语言多级指针指针数组数组指针

    2024-07-23 01:10:02       40 阅读
  3. C语言 数组指针

    2024-07-23 01:10:02       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 01:10:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 01:10:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 01:10:02       45 阅读
  4. Python语言-面向对象

    2024-07-23 01:10:02       55 阅读

热门阅读

  1. 微服务:OpenFeign

    2024-07-23 01:10:02       21 阅读
  2. uniapp锚点点击-页面跳转

    2024-07-23 01:10:02       9 阅读
  3. 解决git 不同branch 下node_moudes不同步的问题

    2024-07-23 01:10:02       12 阅读
  4. LLaMA: 开源的大规模语言模型

    2024-07-23 01:10:02       15 阅读
  5. Docker 深度解析:从入门到精通

    2024-07-23 01:10:02       12 阅读
  6. Gradle任务动作:自定义构建流程的魔法棒

    2024-07-23 01:10:02       16 阅读
  7. HOW - 保证 WebSocket 持续正常连接

    2024-07-23 01:10:02       14 阅读
  8. Sqlmap中文使用手册 - Techniques模块参数使用

    2024-07-23 01:10:02       17 阅读
  9. CF1152C Neko does Maths

    2024-07-23 01:10:02       17 阅读
  10. [技术总结] C++ 使用经验

    2024-07-23 01:10:02       17 阅读
  11. STL set

    2024-07-23 01:10:02       12 阅读