(转)http://www.cnblogs.com/AnnieKim/archive/2011/11/20/2255813.html
这篇是为了加深记忆所写。发现,很多知识若不经过反复的琢磨和动手实践,是很难记得住的。
1) 函数指针的初始化。
函数如下:
1 int CompareString(const string& str1, const string& str2)
2 {
3 return str1.compare(str2);
4 }
函数的初始化有两种方式:
第一种,也是最普遍的方式:
1 int (*CompareFunction)(const string&, const string&) = CompareString;
第二种,是使用typedef定义函数类型,这种写法有助于对代码的理解:
1 typedef int (*CompareFunctionType)(const string&, const string&);
2 CompareFunctionType CompareFunction = CompareString;
2) 函数指针赋值。
函数名可以理解为该类型函数的指针。当然,取地址操作符作用于函数名上也能产生指向该类型函数的指针。也就是说下面两种赋值都是可行的:
1 CompareFunctionType CompareFunction = CompareString;
2 CompareFunctionType CompareFunction = &CompareString;
3) 函数调用。
无论是用函数名调用,还是用函数指针调用,还是用显式的指针符号调用,其写法是一样的:
1 CompareString("abc", "cba");
2 CompareFunction("abc", "cba");
3 (*CompareFunction)("abc", "cba");
4) 函数指针的数组。
对于函数指针的数组,强烈建议使用typedef方式定义类型之后再使用,不然影响代码的阅读性,继续以以上例子为例:
1 //without typedef
2 int (*CompareFunctionArray[3])(const string&, const string&);
3 //with typedef
4 CompareFunctionType CompareFunctionTypeArray[3];
5) 函数指针用做函数返回值的类型。
到这一步,会发现typedef是多么的好用了。不然我是完全读不懂下面语句的意思的:
1 //without typedef
2 int (*func(int*, int))(const string&, const string&);
上面的声明,将func(int*, int)声明为一个函数,返回值为函数指针,函数类型为int (*)(const string&, const string&)。
多么的晦涩啊!
如果写成typedef就不用这么纠结了,足见typedef的作用:
1 CompareFunctionType func(int*, int);
6) 指向extern "C"函数的指针。
《C++ primer 3》中有指出,指向C函数的指针和指向C++函数的指针类型不同,但是现在的很多编译器都有语言扩展,认为这两种函数的指针具有相同的特性。
所以,我在vs 2010中做了尝试,结果证明是支持这种语言扩展的。
函数声明如下:
1 extern "C" int InsideFunctionC(const string& str1, const string& str2)
2 {
3 return str1.compare(str2);
4 }
5
6 int InsideFunctionCPlusPlus(const string& str1, const string& str2)
7 {
8 return str1.compare(str2);
9 }
函数指针的初始化和调用,允许赋值为指向C函数的指针:
1 int (*CompareFunction)(const string&, const string&) = InsideFunctionC;
另外还有一点,当extern "C"应用在一个声明上时,所有被它声明的函数都将受到影响。举个例子:
1 extern "C" void OutSideFunction(int (*fc)(const string&, const string&))
2 {
3 cout<<fc("abc", "cba")<<endl;;
4 }
这里的OutSideFunction和fc都将受到extern "C"的影响,但是vs2010编译器是支持一个指向C++函数的指针作为OutSideFunction的参数。如下:
1 int main()
2 {
3 OutSideFunction(InsideFunctionC);
4 OutSideFunction(InsideFunctionCPlusPlus);
5
6 return 0;
7 }
到此就差不多了。昨天看了一遍,今天又写博客温习了一遍,应该算是加深记忆了。傻笑一个。
分享到:
相关推荐
### C/C++ 函数指针的意义与应用 在C/C++编程中,函数指针是一种高级特性,它允许程序员处理函数的方式如同处理变量一般灵活。理解函数指针的意义及其用法,对于提升代码的可扩展性和灵活性至关重要。 #### 1. ...
在C语言中,指针和函数是两个非常重要的概念,而将它们结合在一起,就产生了指针函数和函数指针变量。这两个概念是C语言高级特性的体现,它们在编程中有着广泛的应用,如回调函数、动态加载库、内存管理等。 首先,...
在C++编程语言中,函数指针是一种强大的特性,它允许程序员通过指针来间接调用函数,从而实现代码的灵活性和复用性。然而,当涉及到类的成员函数时,事情变得稍微复杂一些,因为类的成员函数通常包含一个隐含的参数...
在C/C++编程语言中,函数指针和指针函数是两个不同的概念,虽然它们都涉及到指针和函数,但其用法和含义各有特点。理解这两者的差异对于编写高效、灵活的代码至关重要。 首先,我们来解释"函数指针"。函数指针是一...
### 彻底理解指针,指针数组和数组指针,指针函数和函数指针 #### 一、基础知识 在计算机编程中,指针是一个非常重要的概念,尤其是在C/C++这样的语言中更是如此。简单来说,指针是一种变量,但它存储的不是普通的...
在C++编程中,函数指针是一个非常重要的概念,它允许我们存储函数的地址并可以在程序的不同地方调用。函数指针分为两类:一般(普通)函数指针和类成员函数指针。这两种类型的指针在用法上有所区别,且类成员函数...
Keil C51中函数指针的使用 函数指针是C语言中的一种重要概念,在Keil C51中函数指针的使用具有非常重要的意义。函数指针可以使得程序更加灵活和灵活,特别是在单片机系统中,嵌入式操作系统、文件系统和网络协议栈...
### 函数指针和指针函数的区分及应用 #### 函数指针的理解与使用 **函数指针**是一种特殊的指针类型,它可以用来存储函数的地址,进而通过该指针来调用函数。理解函数指针的关键在于认识到函数也是一种具有特定...
### 函数指针与指针函数的理解 #### 一、函数指针与指针函数的基本概念 在C语言中,函数指针和指针函数是两个重要的概念,它们经常出现在较为复杂的程序设计中,尤其在回调函数、动态绑定等场景中发挥着重要作用。...
C语言指针函数和函数指针详细介绍 C语言中指针函数和函数指针是两个不同的概念,但它们之间存在着紧密的联系。本文将对C语言中的指针函数和函数指针进行详细的介绍。 一、指针函数 指针函数是指返回值为指针的...
3. **取类函数指针的语法**:在易语言中,获取类函数指针通常涉及`__FUNCTION__`关键字,它会返回当前函数的指针,可以用于赋值给类函数指针变量。 4. **类函数的使用场景**:类函数指针在事件处理、异步操作、回调...
【函数指针】是C语言中一种强大的特性,它允许我们使用指针来直接操作函数。函数在程序中被看作是一种数据类型,因此可以像处理其他数据一样处理它们,包括赋值、传递和作为参数。函数指针的定义包含了函数的返回...
C51 函数指针与再入函数 函数指针是 C 语言中几个难点之一。由于 8051 的 C 编译器的独特要求,函数指针和再入函数有更多的挑战需要克服。主要由于函数变量的传递。典型的(绝大部分 8051 芯片)函数变量通过堆栈的...
在C++编程中,函数指针是一个非常重要的概念,它允许我们存储函数的地址并像普通指针一样对其进行操作。函数指针可以被用来作为参数传递给其他函数,或者存储在一个变量中,以便稍后调用。这为程序设计提供了很大的...
函数指针和函数对象 函数指针(全局函数/类成员函数)和函数对象是C++语言中两个重要的概念,经常被混淆和误解。本文将详细介绍函数指针和函数对象的定义、类型、使用方法和区别。 一、函数指针 函数指针是指向...
在C++编程中,函数指针是一个非常强大的工具,它允许我们将函数作为其他函数的参数或者存储在变量中。在本示例中,“函数指针万能打印”着重讲解如何利用函数指针实现一个通用的打印系统,可以适应各种数据类型的...
### 函数指针详解 #### 一、函数指针的概念 在C语言中,函数也是一种特殊的“对象”,它有自己的地址,即函数的入口地址。函数指针是用来存储这些地址的一种特殊类型的指针。通过函数指针,我们可以实现更加灵活的...
在C/C++编程语言中,函数指针是一个非常重要的概念,它允许我们将函数作为其他函数的参数,或者存储在变量中以便稍后调用。在标题"函数指针的使用"中,我们可以深入探讨这个主题。 函数指针的定义: 函数指针是一个...
函数指针的范例 函数指针是 C 语言中的一种高级特性,它允许开发者将函数作为参数传递、返回值或存储在数据结构中。本文将通过一个简单的示例程序,深入探讨函数指针的概念和应用。 首先,让我们从一个简单的函数...
本示例将详细介绍如何将函数指针传递给DLL函数,以便DLL在运行时能够调用应用程序提供的特定功能。 首先,我们需要理解函数指针的概念。函数指针是一个变量,其值为某个函数的地址,允许我们像操作普通数据一样操作...