原以为指针都是指向变量的,现在突然出现一个函数指针,在此简单探究一下,希望能够对大家起到抛砖引玉的作用。
- 定义一个基本函数,作为指向的对象
int addInt(int n, int m) {
return n+m;
}
- 定义一个函数指针“类”,接收两个int参数,返回int
声明函数指针时,格式为:
返回值 (*函数名称形参)(函数的参数列表))
typedef int (*FuctionPointer)(int,int);
- 定义一个函数指针“变量”——相当于匿名类,接收两个int参数,返回int
int (*functionPtr)(int,int);
- 指针函数作为函数参数
int add2to3(int(*functionPtr)(int, int)) {
return (*functionPtr)(2, 3);
}
- 函数指针指向addInt()
functionPtr = &addInt;
- 代码实例
// fuction_pointer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
int addInt(int n, int m) {
return n + m;
}
typedef int(*FunctionPointer)(int, int);/*这样就定义了一种指针类型*/
int add2to3(int(*functionPtr)(int, int)) {
return (*functionPtr)(2, 3);
}
int main() {
FunctionPointer fp = &addInt;
int sum = fp(3, 2);
std::cout<<sum<< std::endl;
int sum2=add2to3(fp);
std::cout << sum2 << std::endl;
system("pause");
return 0;
}
PS:Visual Studio中,如果将#include <iostream>
放在头文件的前面,那么,系统就找不到cout了,好奇怪!
参考地址:http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work?answertab=votes#tab-top
今天在阅读android NDK Google实例代码的时候,碰到一种有点高深的情况,在此记录一下。
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
#include<vector>
struct SSS {
//struct SSS中仅仅声明了一个指针函数(其指向的函数,不接受输入,仅仅返回一个int值)
int(*Realize)();
};
//这个函数恰好符合上方struct SSS中函数指针的要求
int Hello() {
printf("Hello\n");
return 1;
}
int main(){
SSS sss;
//将函数指针,指向Hello函数
(&sss)->Realize = Hello;
//调用函数指针,指向的函数
(&sss)->Realize();
system("pause");
return 0;
}