C中函数指针的使用(包含对typedef用法的讨论)

转载 2013年12月06日 12:30:03

关于C++中函数指针的使用(包含对typedef用法的讨论)
(一)简单的函数指针的应用。
//形式1:返回类型(*函数名)(参数表)
char (*pFun)(int);
char glFun(int a){ return;}
void main()
{
   
pFun = glFun;
    (*pFun)(2);
}
        第一行定义了一个指针变量pFun。首先我们根据前面提到的形式1认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。
       
第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数——函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址
       
然后就是main()函数了,它的第一句您应该看得懂了——它将函数glFun的地址赋值给变量pFunmain()函数的第二句中*pFun显然是取pFun所指向地址的内容,当然也就是取出了函数glFun()的内容,然后给定参数为2


(二)使用typedef更直观更方便。
//形式2typedef 返回类型(*新类型)(参数表)
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一样使用这个变量了。

 

三)在C++类中使用函数指针。
//形式3typedef 返回类型(类名::*新类型)(参数表)
class CA
{
 
public:
    char lcFun(int a){ return; }
};
CA ca;
typedef char (CA::*PTRFUN)(int);
PTRFUN pFun;
void main()
{
    pFun = CA::lcFun;
    ca.(*pFun)(2);
}

       
在这里,指针的定义与使用都加上了类限制对象,用来指明指针指向的函数是那个类的这里的类对象也可以是使用new得到的。比如:
CA *pca = new CA;
pca->(*pFun)(2);
delete pca;

       
而且这个类对象指针可以是类内部成员变量,你甚至可以使用this指针。比如:
       
CA有成员变量PTRFUN m_pfun;
void CA::lcFun2()
{
  
(this->*m_pFun)(2);
}
        一句话,使用类成员函数指针必须有->*.*的调用。

C语言:typedef定义函数指针

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

“指针函数”与“函数指针” typedef 定义函数指针

一、 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型...
  • lishenglong666
  • lishenglong666
  • 2011年12月19日 14:41
  • 1186

cpp: 使用typedef定义函数指针

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

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
  • 4849

C/C++函数指针用法总结

C++函数指针 一函数指针介绍   函数指针指向某种特定类型,函数的类型由其参数及返回类型共同决定,与函数名无关。举例如下: int add(int nLeft,int nRight);//...
  • u013507368
  • u013507368
  • 2014年12月02日 16:48
  • 706

C语言typedef详解

在C还是C++代码中,typedef都使用的很多。typedef与#define有些相似,其实是不同的。基本定义:typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2016年02月17日 16:51
  • 8527

C语言—理解函数指针以及它的用法

什么是函数指针? 指针前面已经写过好多,自以为认识的差不多了,但是今天突然看到一个问题,写一个函数指 针,函数指针就是一个指向函数首地址的指针,接下来写几个指针: 写一个函数指针 写一个函...
  • Dawn_sf
  • Dawn_sf
  • 2017年02月13日 16:59
  • 4452

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

typedef int (^calculateBlock)(int a,int b); 这里面typedef的作用只是给 calculateBlock取了一个 别名,说明以后可以直接使用。 cal...
  • u011671986
  • u011671986
  • 2017年04月16日 13:53
  • 286

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

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

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

1、先给出一道面试题: #include "stdafx.h" #include "stdio.h" //实现数值的自增1 int inc(int a) { return(++a); } //实现数...
  • a904235765
  • a904235765
  • 2015年08月10日 21:17
  • 2267
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C中函数指针的使用(包含对typedef用法的讨论)
举报原因:
原因补充:

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