他小的有

指针函数和函数指针区别及用法

    函数指针与指针函数大不相同,有时候很容易就搞错,下面总结一下:

    1.所谓指针函数就是指返回一个指针的函数,具体格式是: 返回类型* 函数名([参数])

例如:

int *GetData();

    不过像这样的函数一般除了库函数中的内存申请及类的内部实现外,不怎么见到,主要是因为在C/C++中一般遵循谁申请的内存谁负责释放的原则。


    2.函数指针是指一个指向函数地址的指针,函数指针一般有两种定义方式

    2.1 返回类型 (*函数名)(参数表),例如:

#include "stdafx.h"
#include <iostream>
using namespace std;

//两个数相加
int Add(int a, int b)
{
	return (a + b);
}

//较大数
int Max(int a, int b)
{
	return (a > b ? a : b);
}

//定义函数指针
int (*FuncPtr)(int, int);
int _tmain(int argc, _TCHAR* argv[])
{
	FuncPtr = Add;  //指向Add
	int a = FuncPtr(1, 2);  //a = 3

	FuncPtr = Max;  //指向Max
	int b = FuncPtr(1, 2);  //b = 2
	return 0;
}

    这种方式在动态库导出中经常会被用到。


    2.2 typedef 返回类型 (*新类型)(参数);例如:

#include "stdafx.h"
#include <iostream>
using namespace std;

//两个数相加
int Add(int a, int b)
{
	return (a + b);
}

//较大数
int Max(int a, int b)
{
	return (a > b ? a : b);
}

typedef int (*FUNC_CALL)(int, int);  //只是定义了接受两个int参数返回int型的新类型
FUNC_CALL FuncPtr = NULL;  //具体指向谁还没关联
int _tmain(int argc, _TCHAR* argv[])
{
	//int t = FuncPtr(1, 1);  //FuncPtr == NULL,错误,还没确定调用谁

	FuncPtr = Add;  //指向Add
	int a = FuncPtr(1, 2);  //a = 3

	FuncPtr = Max;  //指向Max
	int b = FuncPtr(1, 2);  //b = 2
	return 0;
}

    在上面的这两个函数中,都是接收两个int 的参数,返回值也都是int。定义一个FUNC_CALL的类型,并动态的将FUNC_CALL FuncPtr动态的关联到具体的函数地址里,以实现调用不同的函数。

   例子下载地址: http://files.suchone.com/upload/2016/03/20160326013635_78133.zip

本站部分资源收集于网络,纯个人收藏,无商业用途,如有侵权请及时告知!

2
分享到:

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址