《C游记》 第柒章 - 指针进阶内功锻 功成行满见真如(贰)

简介: 《C游记》 第柒章 - 指针进阶内功锻 功成行满见真如(贰)

image.gif

目录

(壹) 数组参数、指针参数

 🌈  1.1 一维数组传参

 🌈  1.2 二维数组传参

 🌈  1.3 一级指针传参

 🌈  1.4 二级指针传参

(贰) 函数指针

(叁) 函数指针数组


✅《C游记》 专栏 ✅  《小玄的C游之旅》


(壹)数组参数、指针参数

在写代码的时候难免要把【数组】或者【指针】传给函数,这时候就出现了问题,我们在函数的参数这一块该如何设计呢?

🌈  1.1 一维数组传参1.png

一维数组进行传参的时,函数参数可以写成  数组 指针因为数组名是地址,可用指针接收

其中参数是数组时,数组大小可写也可不写;

参数是指针时要找到对应的指针类型才行;


传递参数是普通数组  arr(3种方式)2.png


🌈  1.2 二维数组传参3.png


对于二维数组,可以不知道有多少行,但必须知道一行多少个元素

4.png

🌈  1.3 一级指针传参5.png


思考:

当一个函数的参数部分为一级指针的时候,函数能接收什么参数?

比如:

6.png


7.png


🌈  1.4 二级指针传参8.png


思考:

当函数的参数为二级指针的时候,可以接收什么参数?

9.png104.gif

(贰)函数指针

首先看一段代码:

10.png11.png


输出的是两个地址,这两个地址是test函数的地址。 那我们的函数的地址要想保存起来,怎么保存?

下面我们看代码:12.png首先,能给存储地址,就要求pfun1或者pfun2是指针,那哪个是指针? 

答案是:

pfun1可以存放。

pfun1先和 * 结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为 void 。


阅读两段有趣的代码:13.png


代码2太复杂,如何简化:14.png

解析:

signal 是一个函数声明

signal函数的第一个参数是int,第二个参数是函数指针

signal函数的返回类型为函数指针

signal函数的第二个参数是函数指针,该指针指向的函数

参数是int,返回类型为void

signal函数的返回类型也是一个函数指针,该函指针指向的函数

参数是int,放回类型为void


(叁) 函数指针数组

数组是一个存放相同类型数据的存储空间,那我们已经学习了指针数组, 比如:15.png

那要把函数的地址存到一个数组中,那这个数组就叫 函数指针数组

那函数指针的数组如何定义呢?

16.png

答案是:

parr1 parr1先和[]结合,说明parr1是数组,数组的内容是什么呢?

是int (*)()类型的函数指针。


函数指针数组的用途:转移表

使用函数指针数组的实现:

17.png28.png


105.gif106.gif

目录
相关文章
|
4天前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
11 0
|
6天前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
6天前
|
C语言
指针进阶(回调函数)(C语言)
指针进阶(回调函数)(C语言)
|
6天前
|
存储 C语言 C++
指针进阶(函数指针)(C语言)
指针进阶(函数指针)(C语言)
|
6天前
|
编译器 C语言
指针进阶(数组指针 )(C语言)
指针进阶(数组指针 )(C语言)
|
12天前
指针进阶(3)
指针进阶(3)
21 1
|
12天前
|
搜索推荐
指针进阶(2)
指针进阶(2)
28 4
|
12天前
|
C++
指针进阶(1)
指针进阶(1)
29 1
|
27天前
|
存储 安全 编译器
C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)
C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)
9 0
|
27天前
|
存储 安全 编译器
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
14 2