【C语言】深入理解指针(三)(下)

本篇文章将讲解以下知识:

1、二维数组传参的本质

2、函数指针变量

3、函数指针数组

1、二维数组传参的本质

有了数组指针的理解,我们就能弄清楚二维数组传参的本质了

例如:

在一维数组中,数组名是数字首元素的地址。但有两个例外:

(1)&数组名

(2)sizeof(数组名)

二维数组的数组名也是数组首元素的地址,到底是谁的地址呢?是二维数组第一行的地址。

以下列代码为例:

上述带代码中的arr+i就是arr0(当i等于0时)、arr1(当i等于1时) 、arr2(当i等于2时).

arr数组内部结构:

事实上,二维数组是由一维数组组成的。把一维数组作为数组的元素,这个时候就是二维数组。

总结:二维数组的传参,形参的部分可以写成数组形式也可以写成数组,也可以写成指针形式。当形参写成数组的形式时,行的元素的个数可以省略。

所以根据函数名是数组首元素的地址这个规则,二维数组的数组名表示的就是二维数组第一行的地址,是一维数组的地址,类型是数组指针类型。在上面的例子中,第一行的一维数组的类型就是int5,所以第一行的地址的类型就是:int (*) 5,意味着二维数组传参本质上也是传递了地址,传递的是二维数组第一行这个一维数组的地址。

2、函数指针变量

(1)函数指针变量的创建

数组指针-----指针(地址)-------指向数组的-------存放的是数组的地址。

函数指针变量是用来存放函数地址的,未来通过地址能够调用函数的。

&数组名是整个数组的地址,数组名是数组首元素的地址。两个地址的值是一样的,含义不一样,比如:指针变量+-整数。

函数指针变量解析:

注意:&函数名和函数名都是函数的地址,没有区别。

(2)函数指针变量的使用

例如;

相关推荐
橙橙笔记7 小时前
C++的学习第三部分
开发语言·c++·学习
2603_9651481116 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
SuperByteMaster18 小时前
timer.c 介绍
c语言
知无不研19 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
cfm_291419 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
C++ 老炮儿的技术栈20 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
qq_4480111620 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
小白学大数据21 小时前
长周期爬虫的数据一致性:断点续爬 + 事务回滚保障采集质量
开发语言·爬虫·测试工具
zlinear数据采集卡21 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
Poo_Chai21 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库