一、有无typedef的区别
在C++
中,typedef
关键字可以用来定义类型别名,它可以将一个复杂的类型定义为一个简单的别名,从而使代码更加易读和易维护。在函数指针的声明中,使用typedef
可以将一个函数指针类型定义为一个简单的别名,从而方便使用。
现在来看两个声明:
typedef int (*FuncPtr)(int, int);
int (*FuncPtr)(int, int);
这两个声明的区别在于第一个声明使用了typedef
关键字,将函数指针类型定义为了一个别名FuncPtr
;而第二个声明仅仅是定义了一个函数指针变量,没有使用typedef
关键字。因此,第一个声明可以用来定义函数指针类型,而第二个声明只能用来定义函数指针变量。
在使用函数指针时,使用typedef
定义的函数指针类型可以使代码更加简洁和易读。例如,使用typedef
定义了一个名为FuncPtr
的函数指针类型后,我们可以用以下方式来定义一个函数指针变量:
FuncPtr funcPtr = &myFunc;
这个代码中,我们使用了FuncPtr
类型定义了一个名为funcPtr
的函数指针变量,它指向一个名为myFunc
的函数。这样,代码更加简洁易读,也更加容易维护。
函数指针类型和函数指针变量是两个不同的概念:
函数指针类型定义了一个函数指针的类型,可以用来声明函数指针变量;而函数指针变量是一个指向函数的指针,可以用来调用函数或者作为参数传递给其他函数。
二、实例
#include<iostream>
using namespace std;
typedef int (*FuncPtrTypedef)(int, int);
int (*FuncPtr)(int, int);
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int main()
{
FuncPtr = add;
cout<<"FuncPtr add is: "<<FuncPtr(1, 2)<<endl;
FuncPtr = sub;
cout << "FuncPtr sub is: " << FuncPtr(3, 1) << endl;
FuncPtrTypedef myfun;
myfun = add;
cout << "FuncPtrTypedef add is: " << myfun(1, 2) << endl;
myfun = sub;
cout << "FuncPtrTypedef sub is: " << myfun(3, 1) << endl;
return 0;
}