typedef 函数指针

原创 2013年12月02日 15:13:24


1、简单的函数指针应用:

char (*pFun)(int); 
char glFun(int a){ return;} 
void main() 
{ 
    pFun = glFun; 
    (*pFun)(2); 
}

    第一行定义了一个指针变量pFun。首先我们认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。
         第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数——函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址
         然后就是main()函数了,它的第一句您应该看得懂了——它将函数glFun的地址赋值给变量pFun。main()函数的第二句中“*pFun”显然是取pFun所指向地址的内容,当然也就是取出了函数glFun()的内容,然后给定参数为2。


2.使用typedef更直观更方便

typedef char (*PTRFUN)(int); 
PTRFUN pFun; 
char glFun(int a){ return;} 
void main() 
{ 
    pFun = glFun; 
    (*pFun)(2); 
} 

     typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用PTRFUN了。
           第二行的代码便使用这个新类型定义了变量pFun,此时就可以像使用形式1一样使用这个变量了。


3、一个小例子。


#include<stdio.h>

typedef int  (*pFun)(int , int);

int add(int x,int y)
{
	int sk_res = x + y;
	return sk_res;
}

int main(void)
{	
	
	int Res = 0;
	pFun  m_p_add;
	
	m_p_add = add;
	 
	Res = m_p_add(2,4);
	printf("Res = %d\n",Res);
}


程序运行的结果:



四、

在学习《unix环境高级编程》信号的时候,我们会遇到一个比较复杂的函数,signal函数:

void (*signal(int signo,void (*func)(int)))(int)


单纯看这个函数还是比较容易理解的,即函数名,*signal(int signo,void (*func)(int))
书中采用typedef来简化了函数的定义,
typedef void Sigfunc(int);
Sigfunc *signal(int,Sigfunc *) = Sigfunc *signal(int signo,Sigfunc *func) 

五、注意
陷阱一: 
记住,typedef是定义了一种类型的新别名,不同于宏,它不是简单的字符串替换。比如: 
先定义: 
typedef   char*   PSTR; 
然后: 
int   mystrcmp(const   PSTR,   const   PSTR); 
const   PSTR实际上相当于const   char*吗?不是的,它实际上相当于char*   const。 
原因在于const给予了整个指针本身以常量性,也就是形成了常量指针char*   const。 
简单来说,记住当const和typedef一起出现时,typedef不会是简单的字符串替换就行。 
陷阱二: 
typedef在语法上是一个存储类的关键字(如auto、extern、mutable、static、register等一样),虽然它并不真正影响对象的存储特性,如: 
typedef   static   int   INT2;   //不可行 
编译将失败,会提示“指定了一个以上的存储类”。



c++ typedef 函数指针详细说明

引用自两篇blog原帖1地址 http://www.enjoykorea.net/html/25/25-26214.html原帖2地址 http://blog.csdn.net/sharpdew/ar...
  • future200x
  • future200x
  • 2010年03月05日 17:26
  • 4858

C++------------typedef 函数指针类型定义

摘要bycrazyhacking:        typedef 是定义了一种“函数指针”类型,可以再声明很多变量。函数指针的定义是定义了一个变量。 int max(int x,int y){...
  • crazyhacking
  • crazyhacking
  • 2013年12月27日 11:28
  • 1579

C语言:typedef定义函数指针

在typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗? int (*s_calc_func(char op))(int, int); 如果...
  • dingyuanpu
  • dingyuanpu
  • 2010年05月09日 17:34
  • 6965

const/typedef/函数指针/回调函数

变量:       左值:(lvalue),左值可以出现在赋值语句的左边或右边       右值:(rvalue),右值只能出现在赋值的右边,不能出现在赋值语句的左边。 变量是左值,...
  • lostinai
  • lostinai
  • 2015年04月17日 12:59
  • 813

cpp: 使用typedef定义函数指针

Java在对于oop的封装上面抽象程度非常的高;但是对于函数,java里面的函数或者方法,可以说是非常基础或者低级。纵观java的语言特性,没有对函数有更高程度的封装。 但是,除了在oop方面的抽象...
  • DucklikeJAVA
  • DucklikeJAVA
  • 2017年12月10日 21:35
  • 320

typedef函数指针与函数类型的定义及使用方式

1、先给出一道面试题: #include "stdafx.h" #include "stdio.h" //实现数值的自增1 int inc(int a) { return(++a); } //实现数...
  • a904235765
  • a904235765
  • 2015年08月10日 21:17
  • 2294

c++ typedef 函数指针详细说明(包含类函数指针)

http://blog.csdn.net/future200x/article/details/5350134
  • lwljava
  • lwljava
  • 2014年07月18日 22:47
  • 1397

typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针

上面介绍得是我们常用的比较简单的typedef的用法,下面首先介绍一下函数指针。//定义一个指针变量p,根据形式1函数指针的形式 //我们可以知道他是指向一个参数为Int,返回类型为 //char的函...
  • u014221279
  • u014221279
  • 2016年03月25日 16:06
  • 5057

C语言结构体及typedef关键字定义结构体别名和函数指针的应用

结构体(struct)的初始化 struct autonlist { char *symbol; struct nlist nl[...
  • txl16211
  • txl16211
  • 2014年11月16日 19:43
  • 2569

关于oc中出现的typedef的用法/定义函数指针

typedef int (^calculateBlock)(int a,int b); 这里面typedef的作用只是给 calculateBlock取了一个 别名,说明以后可以直接使用。 cal...
  • u011671986
  • u011671986
  • 2017年04月16日 13:53
  • 286
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:typedef 函数指针
举报原因:
原因补充:

(最多只允许输入30个字)