C语言——指针函数

简介: 指针

介绍了关于指向一维数组的指针, 相关内容可以参考该文.本文将简要介绍指向函数的指针.

  • 如何声明一个指向函数的指针?

voidprint(intnum); // 声明函数

void (*funptr)(int) =print; // 声明指向函数的指针, 该函数接受一个int参数, 返回void, 并用print函数的地址初始化

  • 函数指针类型的通用形式: 返回类型 (\* 可选限定符) (形参列表)比如 funptr 的类型是 void (*) (int) , 其中可选的限定符有 constvolatile
  • 函数名是什么?函数名被使用时总是由编译器将它转换为该函数类型的函数指针, 比如 print 的类型就是 void (*) (int)* 所以可以用 print 初始化 funptr. 当使用 & 时只是显示的说明了编译器的转换操作, 所以 print&print 都是 void () (int) 类型.

注意: 函数名与数组名在这点上的区别.

  • 如何通过指向函数的指针调用函数?事实上有三种调用方式可选:

print(10); // (1) 使用函数名调用print函数

(*funptr)(10); // (2) 使用指向函数指针解引调用print函数`

funptr(10); // (3) 使用指向函数指针直接调用print函数

(1)的执行过程是函数名print首先被转换成一个指向函数的指针, 该指针指向print函数在内存中的位置, 然后调用操作符调用print函数, 执行开始于这个位置的代码.(2)的执行过程是解引操作将funptr转换为函数名, 然后执行(1)的操作, 显然解引操作不是必需的, 函数调用操作符需要的是一个指向函数的指针.(3)的执行过程是函数调用操作符直接调用函数.

  • 声明 “指向函数的指针” 的指针指向函数的指针本质上仍然是一种指针, 我们可以按照二级指针声明指向它的指针.

voidprint(intnum); // 声明函数

void (*funptr)(int) =&print; // 声明指向函数的指针

void (**funpptr)(int) =&funptr; // 声明 "指向函数的指针" 的指针

(**funpptr)(10); // 通过二级指针调用print

  • 声明元素类型为 “指向函数的指针” 的数组同样, 如果具有多个类型一样的指向函数的指针, 我们可以将它们放在一个数组中.

voidprint(intnum); // 声明函数

void (*funptr)(int) =&print; // 声明指向函数的指针

void (*funptrarray[])(int) =funptr; // 声明元素类型为"指向函数的指针"的数组, 数组大小为1, funptrarray[0]用funptr初始化

(*funptrarray[0])(10); // 调用print

(**funptrarray)(10); // 等价的调用print

这种技巧也称为转移表.

目录
相关文章
|
16天前
|
安全 C语言
【C语言】如何规避野指针
【C语言】如何规避野指针
20 0
|
17天前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
17天前
|
C语言
C语言:内存函数(memcpy memmove memset memcmp使用)
C语言:内存函数(memcpy memmove memset memcmp使用)
|
6天前
|
C语言
c语言指针总结
c语言指针总结
12 1
|
2天前
|
存储 编译器 C语言
C语言:字符函数 & 字符串函数 & 内存函数
C语言:字符函数 & 字符串函数 & 内存函数
11 2
|
11天前
|
缓存 安全 编译器
【C 言专栏】C 语言函数的高效编程技巧
【5月更文挑战第1天】本文探讨了C语言中函数的高效编程技巧,包括函数的定义与作用(如代码复用和提高可读性)、设计原则(单一职责和接口简洁)、参数传递方式(值传递、指针传递和引用传递)、返回值管理、调用约定、嵌套与递归调用,以及函数优化技巧和常见错误避免。掌握这些技巧能提升C语言代码的质量和效率。
【C 言专栏】C 语言函数的高效编程技巧
|
11天前
|
存储 程序员 C语言
【C 言专栏】C 语言指针的深度解析
【4月更文挑战第30天】C 语言中的指针是程序设计的关键,它如同一把钥匙,提供直接内存操作的途径。指针是存储其他变量地址的变量,通过声明如`int *ptr`来使用。它们在动态内存分配、函数参数传递及数组操作中发挥重要作用。然而,误用指针可能导致错误,如空指针引用和内存泄漏。理解指针的运算、与数组和函数的关系,以及在结构体中的应用,是成为熟练 C 语言程序员的必经之路。虽然挑战重重,但掌握指针将增强编程效率和灵活性。不断实践和学习,我们将驾驭指针,探索更广阔的编程世界。
|
12天前
|
算法 搜索推荐 程序员
C语言中的函数指针和回调函数
C语言中的函数指针和回调函数
10 2
|
13天前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
|
13天前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)