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

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

目录

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

  🌈  1.1 一维数组传参

  🌈  1.2 二维数组传参

  🌈  1.3 一级指针传参

  🌈  1.4 二级指针传参

(贰) 函数指针 

(叁) 函数指针数组


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


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

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

🌈  1.1 一维数组传参

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

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

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


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


 🌈  1.2 二维数组传参


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


🌈  1.3 一级指针传参


思考: 

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

比如:



🌈  1.4 二级指针传参


思考: 

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

 

(贰)函数指针 

首先看一段代码:


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

下面我们看代码:


首先,能给存储地址,就要求pfun1或者pfun2是指针,那哪个是指针? 

答案是:

pfun1可以存放。

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


阅读两段有趣的代码:


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

 

 解析:

  1. signal 是一个函数声明
  2. signal函数的第一个参数是int,第二个参数是函数指针
  3. signal函数的返回类型为函数指针
  4. signal函数的第二个参数是函数指针,该指针指向的函数
  5. 参数是int,返回类型为void
  6. signal函数的返回类型也是一个函数指针,该函指针指向的函数
  7. 参数是int,放回类型为void

(叁) 函数指针数组

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

  

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

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

  

答案是:

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

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


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

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

  

  


 

  

 

热点资讯