// functionpointer001.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//演示函数指针的例子
#include <iostream>
using namespace std;
int add(int a, int b)
{
return a + b;
}
int sum(int x, int y, int z)
{
return x + y + z;
}
int main()
{
//声明指向一个函数的指针,该函数接受两个整数的参数并返回它们的和
int (*add_ptr)(int, int);
//将函数的地址赋给函数指针
add_ptr = add;
//通过函数指针调用函数
int result = add_ptr(5, 9);
cout << "The add is= " << result << endl;
int (*sum_ptr)(int, int, int);
sum_ptr = sum;
int sum_value = sum_ptr(9, 8, 8);
cout << "The sum is= " << sum_value << endl;
}
/*函数名在C语言中有两种不同的使用方式,一种是作为函数调用,另一种是作为指针使用
当函数名用于表达式中时,它会隐式地转换为指向该函数的指针。这意味着在大多数情况下,函数名可以
被当作指向函数入口地址的指针。例如,当你看到func(arg1, arg2)这样的调用,实际上你是在通过函数
名(即函数的地址)来调用函数。
*/
/*然而,函数名本身并不是一个地址常量,而是一个函数指示符,它在某些上下文中会被解释为指向函数
的指针。例如,当你对函数名使用&操作符时,你会得到一个指向该函数的指针。这与直接使用函数名的效
果是一样的,因为函数名在大多数表达式中会自动转换为指向自己的指针。
此外,函数名和函数地址的概念在编译器和链接器中有着实际的区别。函数地址是指函数在内存中的确切
位置,而函数名则是在编译时用于引用这个地址的标识符。在程序的链接过程中,函数名会被解析为具体
的内存地址。
*/
/*
* 总结来说:虽然函数名通常可以作为函数的地址使用,但他们在概念上是有区别的。
* (1)函数名是函数的标识符;
* (2)而函数地址函数在内存中的实际位置。
* (3)在c语言中,函数名的使用取决与上下文,它可以作为函数调用,也可以作为指向函数的指针;
*/
函数指针的举例
最新推荐文章于 2024-11-07 12:47:29 发布
文章讲述了C语言中函数指针的使用,区分了函数名作为标识符和函数地址在内存中的概念,以及在不同上下文下的功能差异,强调了函数名在作为函数调用和指针时的区别。
摘要由CSDN通过智能技术生成