通俗易懂的函数指针及函数指针数组

简介: 通俗易懂的函数指针及函数指针数组

函数指针

指针我们知道实际上是一个变量或者数组等的地址。如我们定义:

void *Ptr;

该指针变量可以指向我们希望指向的地址,如我们有数组为

a[2] = {0,1};

那么我们可以通过给指针变量赋值,使其指向该数组Ptr = a;

函数指针实际上和这种指针类似,只不过其变量类型是一个函数类型而已。如果觉得搞不明白,可以把函数类型理解为和int一样的数据类型。

如我们可以这样定义一个函数

void DataTrans(int Data, int Len);

那么同样我们可以这样定义一个函数指针

void (*DataTransPtr)(int Data,int Len);

对比函数的定义和函数指针的定义可以发现,不同的是函数指针需要在函数名前加上 * 以代表该变量是个指针变量,其余的和函数的定义一样。

所以这样的话我们就可以通过赋值将函数的地址赋给函数指针,使函数指针指向该函数。
DataTransPtr = DataTrans;或者DataTransPtr = &DataTrans;两者等价。

指针变量

定义时需要加星号,使用时不需要加。使用时如果加的话便是取该地址上的值了。

函数指针数组

从上面可以看出给函数指针赋值时我们用了两种方式,其实C语言中的函数名本身代表的就是该函数的首地址。因此对于函数指针数组而言,直接使用函数名即可。
首先定义3个函数为

void FA(int a, int b); 
void FB(int a, int b); 
void FC(int a, int b);

然后定义一个同类型的函数指针

void (*FPtr)(int a, int b);

然后定义一个数组

对于以上的三种定义可以类比为变量的定义,类比如下
我们定义了3个变量分别为

int F1; int F2; int F3;

然后定义了一个同类型的指针变量

int *F1;

然后定义了一个数组

int array_int[3];

当然我们可以把三个变量的值赋给数组

array_int[0] = F1;

想要赋值的话需要保证F1array_int的类型相同,例子中他们都是int型,所以可以赋值。

那么对于函数指针数组来说,如果要给函数指针数组赋值,也同样需要保证类型一致。
首先我们需要把函数指针重新做一下定义

typedef void(* FPtr)(int a, int b);

这样是重新定义了一个新类型,也就是函数指针类型,可类比int
然后对数组定义

FPtr array[3];

这样数组的类型就是函数指针类型,可以通过对数组赋值完成函数的调用,如

FPtr array[] = {
FA;
FB;
FC; }

当我们需要调用函数FA时,可直接使用array0来调用。

相关文章
|
2月前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
39 3
|
2月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
2月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
2月前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
2月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
60 4
|
2月前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
52 2
|
2月前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
41 1
|
3月前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
3月前
|
存储
如何通过指针数组来实现二维数组?
介绍了二维数组和指针数组的概念及其区别,详细讲解了如何使用指针数组模拟二维数组,包括定义与分配内存、访问和赋值元素、以及正确释放内存的步骤,适用于需要动态处理二维数据的场景。