原文地址:http://blog.csdn.net/dragoniye/archive/2008/12/17/3537701.aspx
函数指针是指向函数的指针变量。
因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参数。函数指针的说明方法为:
数据类型标志符 (*指针变量名)(参数);
int (*ptr)();
注:函数括号中的参数可有可无,视情况而定。
下面的程序说明了函数指针调用函数的方法:
#include
int max(int x,int y){ return(x>y?x:y); }
void main()
{
int a,b,c;
ptr=max;
scanf("%d,%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你像怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数,不过注意,指向函数的指针变量没有++和--运算,用时要小心。
不过,在某些编译器中这是不能通过的。这个例子的补充如下。
应该是这样的:
1.定义函数指针类型:
typedef int (*fun_ptr)(int,int);
2.申明变量,赋值:
fun_ptr max_func=max;
也就是说,赋给函数指针的函数应该和函数指针所指的函数原型是一致的。
// 函数定义
void fun1() { printf("function 1 "); }
void fun2() { printf("function 2 "); }
void fun3() { printf("function 3 "); }
void fun4() { printf("function 4 "); }
// 方法1
// 函数数组定义并赋初值
void (*p[])() = { fun1, fun2, fun3, fun4 };
// 调用数组中的函数
for(int i=0; i < 4; i++)
{
p[i]();
}
// 方法2
typedef void (*PFUN)(); // 定义函数指针
PFUNC funArray[] = { fun1, fun2, fun3, fun4 };
// 调用数组中的函数
for(int i=0; i < 4; i++)
{
funArray[i]();
}
分享到:
相关推荐
### 彻底理解指针,指针数组和数组指针,指针函数和函数指针 #### 一、基础知识 在计算机编程中,指针是一个非常重要的概念,尤其是在C/C++这样的语言中更是如此。简单来说,指针是一种变量,但它存储的不是普通的...
总之,这个例子展示了C++中函数指针的基本用法,包括如何声明、定义和传递函数指针,以及如何在数组中存储和操作函数指针。通过这样的练习,你可以更好地理解和掌握C++中的函数指针及其在实现灵活代码中的作用。
函数指针和函数指针数组 函数指针是一种特殊的指针,它是指向函数的指针。函数指针可以用来存放函数的地址,并且可以通过函数指针来调用函数。 1. 简单介绍 函数指针是指向函数的指针,它可以用来存放函数的地址...
本文将详细介绍如何在C++中使用函数指针以及函数数组指针,特别是如何通过这些技术来减少代码量、提高代码的复用性和可读性。 #### 函数指针基础 函数指针是指向函数的指针变量。它们可以存储函数的地址,并且可以...
标题中的“多线程函数指针数组.rar”表明这是一个关于多线程编程的资源,其中可能包含使用函数指针数组来实现线程间通信或任务调度的示例代码。描述中提到“很复杂,很复杂,值得研究,但不适合做游戏”,这暗示了多...
9. **typedef 和函数指针**: `typedef` 关键字可以用来定义新的类型别名,使得函数指针的定义更加简洁。例如,`typedef int (*fp)(int a);` 定义了一个名为 `fp` 的类型,代表了接受一个整数参数并返回整数的函数...
### 函数指针数组 #### 一、基本概念 在C/C++编程语言中,函数指针是指向函数...通过结合多级指针和函数指针数组,可以实现更为复杂的数据结构和算法设计。理解这些概念对于编写高效且易于维护的程序是非常有帮助的。
"C语言指针数组函数笔记" ...本笔记总结了C语言中的指针和数组相关知识点,涵盖了变量、指针变量、指针运算符、数组和指针数组函数等内容。通过阅读本笔记,读者可以更好地理解和应用C语言中的指针和数组。
### 彻底了解指针数组、数组指针以及函数指针 #### 一、指针与内存分配...通过上述介绍,我们可以看到指针数组、数组指针以及函数指针在C语言中的重要性和灵活性。熟练掌握这些概念对于编写高效、灵活的代码至关重要。
在此基础上,我们可以创建函数指针数组,即一个数组中存储多个函数指针,这些函数具有相同的参数列表和返回类型。函数指针数组能够根据不同的条件或需求,动态地选择调用不同的函数,极大地提高了代码的灵活性和效率...
C语言中对函数指针数组不是很了解,老师最近布置了一个作业,就搜集资料写了一个,希望能给大家启发,如果对C语言复杂指针的分析不是很懂得话,可以网上搜索“右左法则”
自己整理的经典程序,数组,指针,函数那是相当有用
详细剖析:指针函数、函数指针、指针数组、数组指针、双重指针、指针与动态内存分配 个人总结要点: 本质: 地址要用指针来存储,指针是用来存储地址的!!! 重难点: 指针指向的地址,也就是指针存储的地址!!...
在C/C++编程语言中,数组和指针是两个核心概念,它们的结合以及与函数指针的交互能实现强大的功能。本主题将深入探讨数组指针和函数指针的应用,通过提供的源代码实例,我们可以更好地理解这两种概念的实用性和灵活...
本篇文章将深入探讨两种特殊的指针类型:数组指针和函数指针。这两种类型的指针在处理数据集合和调用函数时具有显著的优势。 首先,让我们了解数组指针。在C++中,数组本质上是一系列相同类型的数据元素的连续存储...
本文旨在澄清关于数组名是否等同于指针这一常见的误区,并通过具体的代码示例来深入探讨数组和指针之间的关系及其差异。 #### 二、数组与指针的基本概念 1. **数组**: - 数组是一系列相同类型的数据项的集合。 ...
函数指针和函数指针数组的使用 函数指针和函数指针数组是C语言程序设计中的一种重要概念,它们可以解决实际程序编写过程中的多种情况问题。在本文中,我们将介绍函数指针和函数指针数组的概念、定义、使用方法,并...
C语言中指针、数组和函数的综合应用与实例解析 本文对C语言中指针、数组和函数的概念、运算和应用进行了详细的探讨和分析。指针是C语言的重要特色,是一种特殊的数据类型,通过存储空间的地址或编号来访问数据。...
为了简化函数指针的定义和使用,可以采用`typedef`关键字来创建函数指针类型别名。例如: ```cpp typedef int(*fp)(int); fp fpi; fpi = test; ``` 这样,`fpi`就成为了一个指向接受整型参数并返回整型值的函数的...
基于Keil的指针数组作为函数的参数显示多个字符串.rar(源码)基于Keil的指针数组作为函数的参数显示多个字符串.rar(源码)基于Keil的指针数组作为函数的参数显示多个字符串.rar(源码)基于Keil的指针数组作为函数...