C++ 函数指针2025年5月30日 | 阅读 7 分钟 在 C++ 中,函数指针是一种指针,它指向函数而不是数据值。它允许函数作为参数传递、存储在数组中或从其他函数返回,从而实现动态函数调用和灵活的编程结构,例如回调和函数表。 在 C++ 中,指针用于指向某些变量;同样,函数指针是用于指向函数的指针。它主要用于存储函数的地址。我们可以使用函数指针调用函数,也可以将指针作为参数传递给另一个函数。它们主要用于事件驱动应用程序、回调,甚至用于将函数存储在数组中。 函数的地址是什么?众所周知,计算机只理解低级语言,即二进制形式。在 C++ 中,程序中的每个函数在编译后主要存储在主内存 (RAM) 中。我们可以使用编译器将高级源代码转换为存储在可执行文件中的机器代码。此可执行文件存储在 RAM 中。CPU 从 main() 方法开始执行,它读取 RAM 中的副本而不是原始文件。 ![]() 所有函数和机器代码指令都是数据。此数据是一堆字节,所有这些字节在 RAM 中都有一些地址。函数指针包含函数第一条指令的 RAM 地址。 函数指针的声明以下语法显示了函数指针的声明 在这个语法中,
获取函数的地址在 C++ 中,我们可以非常轻松地获取函数的地址。如果我们想获取函数的地址,我们只需要提及函数的名称,而不需要调用函数。 C++ 获取函数地址的示例让我们举一个例子来说明如何在 C++ 中获取函数的地址。 示例编译并运行输出 Address of a main() function is : 1 说明 在上面的程序中,我们显示了 main() 函数的地址。为了打印 main() 函数的地址,我们只提到了函数的名称;没有括号,也没有参数。因此,函数名称本身,没有任何括号或参数,意味着函数的地址。 使用函数指针间接调用函数在 C++ 中,我们可以通过简单地使用函数指针的名称,借助函数指针调用函数。通过函数指针调用函数的语法与我们通常调用函数的方式类似。 C++ 使用函数指针间接调用函数的示例让我们举一个例子来说明如何使用函数指针间接调用函数。 示例编译并运行输出 value of sum is : 10 说明 在此示例中,我们声明了函数指针,即 int (*funcptr)(int,int),然后我们将 add() 函数的地址存储在 funcptr 中。这意味着 funcptr 包含 add() 函数的地址。现在,我们可以使用 funcptr 调用 add() 函数。最后,语句 funcptr(5, 5) 调用 add() 函数,add() 函数的结果存储在 sum 变量中。 将函数指针与字符串一起使用在 C++ 中,函数指针不限于数字操作,它们也可以与任何函数签名一起使用,包括那些接受 char* 或 std::string 类型的函数。它对于处理字符串操作非常有用,包括自定义打印、解析、格式化等。 C++ 带字符串的函数指针示例让我们举一个例子来说明 C++ 中带字符串的函数指针。 示例编译并运行输出 Enter the name of the person: John Name of the person is : John 说明 在此示例中,我们定义了函数 printname(),它包含 char 指针作为参数。之后,我们声明了函数指针,即 void (*ptr)(char*)。语句 ptr=printname 表示我们将 printname() 函数的地址分配给 ptr。最后,我们可以使用语句 ptr(s) 调用 printname() 函数。 函数指针数组在 C++ 中,函数指针数组是一个集合,其中每个元素都是指向函数的指针。它支持动态函数选择,并有助于根据索引或条件调用函数。 语法 它具有以下语法: C++ 函数指针数组示例让我们举一个例子来说明 C++ 中的函数指针数组。 示例编译并运行输出 Addition: 38 Subtract: 2 Multiply: 360 说明 在此示例中,函数指针数组操作用于存储三个算术函数:加法、减法和乘法。在数组中,每个函数指针都带两个整数参数(a 和 b)调用,这允许动态调用相应的操作。 将函数指针作为参数传递在 C++ 中,函数指针可以作为参数传递给另一个函数,以允许动态行为。如果我们要执行此操作,我们有两种主要方法。首先,要么传递我们得到的值,其次,传递程序中已存在的函数指针。 C++ 将函数指针作为参数传递的示例让我们举一个例子来说明如何在 C++ 中将函数指针作为参数传递。 示例编译并运行输出 func1 is called 说明 在此示例中,func2() 函数将函数指针作为参数。之后,main() 方法调用 func2() 函数,其中传递了 func1() 的地址。通过这种方式,func2() 函数间接调用了 func1()。 C++ 函数指针 MCQ1) C++ 中的函数指针是什么?
答案: b) 它是一个存储函数地址的指针 2) 下列哪个选项显示了 C++ 中函数指针的正确语法?
答案: b) int (*funcptr)(int, int); 3) 下面代码的输出是什么?
答案: a) Tech 4) 以下哪个选项不是 C++ 中函数指针的正确用法?
答案: c) 调用构造函数 5) 下面代码的输出是什么?
答案: d) 55 下一主题C++ 内存管理 |
数组和指针密切相关。在 C++ 中,数组的名称被视为指针,即数组的名称包含元素的地址。C++ 将数组名视为第一个元素的地址。...
5 分钟阅读
在 C++ 中,void 指针是一种特殊的指针类型,它可以存储任何数据类型的地址。它是一种通用指针,因为它不与任何特定的数据类型相关联。编译器将其声明为原始内存地址,因为...
11 分钟阅读
C++ 中的内存管理 在 C++ 中,内存管理是一个管理计算机内存并为程序分配内存空间以提高整体系统性能的过程。内存管理也很有用,因为它允许在运行时进行动态内存分配。在此过程中,...
7 分钟阅读
C++ 中的 sizeof() 运算符 在 C++ 中,sizeof() 是一个运算符,用于计算数据类型、常量和变量的大小。它是一个编译时运算符,因为它在编译时返回任何变量或常量的大小。它非常有用...
阅读 10 分钟
C++ 中 free 和 delete 的区别 在 C++ 中,free() 函数和 delete 运算符都主要用于释放动态分配的内存。两者都有类似的功能,但在来源、用法、行为、类型安全等几个方面有所不同。在此...
阅读 6 分钟
C++ 中引用和指针的区别 在 C++ 中,引用和指针看起来相似,但它们之间存在一些差异。引用是现有变量的另一个名称,而指针是存储地址的变量...
阅读 6 分钟
在 C++ 中,引用使用“与号”(&)符号定义。引用变量是 C++ 中现有变量的别名,它提供了对同一内存位置的访问,只是名称不同。一个变量的引用不能被改变以引用...
7 分钟阅读
在 C++ 编程语言中,指针是一个变量,也称为定位符或指示符,它指向值的地址。地址的符号由指针(*)星号表示。除了创建和修改...
阅读 8 分钟
C++ 中 malloc() 和 new 的区别 在 C++ 中,malloc() 函数和 new 运算符主要用于动态分配内存。但是,这两个函数用于相同的目的,但在几个方面有所不同。malloc() 和 new 之间的主要区别在于...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India