函数指针定义中的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 04:18:22
typedef int (* funpt) (int a,int b)

typedef在这干什么用的啊
一般的函数指针声明好像都不带typedef的啊。

定义类型。 不加typedef就成了定义变量了

所以这根本不是函数指针的声明, 而是声明一个“函数指针类型”

funpt就是一个类型。 以后你写 funpt a; 就相当于你写 int (*a)(int, int);了

typedef 是类型声明,可以为一种类型声明一个新的名称。 例如如果定义一个整型变量用于计数。我们一般可以这样定义:int count=0; 但是有时候为了更加直观一些,我们可以定义一个新的类型例如:typedef int COUNT;这样定义之后,COUNT就可以当做是一个整型类型来使用了,其地位与int是一样的,但是看起来是不是更加直观一些呢。例如:COUNT count=0; 我们一看就知道定义的是一个用于计数的变量了(虽然其本质还是int)。当然typedef不仅仅是说用在为了使类型看起来更加直观。其实有的地方还必须要使用他。例如如果有下面的函数:
char print(int x,int y)
{
return 'a';
}

定义一个指向此函数的指针变量:

char(*p)(int,int)=print;

注意此时p是一个变量。好,现在有一个问题来了: 要定义一个函数func,此函数具有两个int类型的参数,返回一个指针类型,此指针恰好是指向上面的print类型的函数的。那怎么定义呢。像下面这样吗:

char(*)(int,int) func(int x,int y)
{
return print;
}

返回的类型是这样的啊char(*)(int,int)。 为什么不对呢,其实上面的定义有点想当然了。为什么呢,因为我们平常定义函数的时候,例如说函数返回一个char类型的数据,我们可以直接这样写:char func(int x,inty),按照这样的道理推测,现在要返回一个指向print类型函数的指针,不正好是char(*)(int,int)类型的吗,那么把上面的char替换成char(*)(int,int)不就行了吗。。 其实这是完全错误的,不是简单的替换,这是完全想当