当前位置:首页 » 编程语言 » c语言函数指针typedef
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言函数指针typedef

发布时间: 2022-02-24 01:06:57

c语言关于typedef的用法。

typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

❷ 在C语言中typedef是什么意思干什么用的

typedef是C/C++常用语法,typedef作用,归结起来,可以分为四种:

1、定义一种类型名

常规的应用中,想要定义两个字符指针,写下如下代码: char *a, b

(1)char* a,b;

(2)char c='m';

(3)a=&c;

(4)b=&c;

上述代码是错误的,只有a为字符指针,b仍旧为字符变量。通过#define进行宏定义,仍然是无效的,因为宏定义仅仅是字符替换。

以下则可行:

(1)typedef char* PCHAR;

(2)PCHAR pa, pb;

2、用于struct结构体

(1)#include <stdio.h>

(2)struct tagPOINT1

(3){

(4)int x;

(5)int y;

(6)};

(7)int main()

(8){

(9)tagPOINT1 p1,p2;//此句编译无法通过

(10)//错误信息:error: unknown type name 'tagPOINT1'

(11) //环境:Gcc 4.8.1

(12)}

必须采用如下定义;

(1)struct tagPOINT1 p1,p2;//必须有关键字 struct

(2)采用typedef,则可以省掉结构体定义时的struct

(3)ypedef struct tagPOINT

(4){

(5)int x;

(6)int y;

(7)}POINT;

(8)POINT p1; // 这样就比原来的方式少写了一个struct。

3、跨平台移植

程序编写中,如果考虑到平台移植的因素,则需要从代码中抽象出硬件层的差异,例如,变量所占空间,端模式等等。

考虑一个浮点型变量,在不同的硬件平台上,所占据的空间有可能不同,此时,可以采用typedef将其定义到单独的头文件内,该头文件是纯粹抽象硬件相关的内容:

(1)typedef float REAL;

(2)typedef short int INT16;

(3)typedef int INT32

(4)...

这样的话,如果将来考虑到程序的移植,只需要修改该头文件即可。

4、为复杂的声明取别名

复杂的声明形如:void (*b[10]) (void (*)());

意思:首先*b[10]为指针数组,它里面的十个元素全是指针。到底是什么指针呢,是一个返回类型为空,形参为空的函数指针。

这种复杂的声明,可以用typedef进行简化:

首先:声明后面的函数指针:

(1)typedef void (pFunParam *)();

接着声明前面的指针数组:

(1)typedef void (*pFunx)(pFunParam);

原声明的最简化版:

pFunx b[10];

本文档在撰写过程中,参考了网络博客typedef用法

里面提到一个复杂的声明:

(1)doube(*)() (*e)[9];

而然这个声明在gcc下编译时不通过的,按照作者的本意,似乎应该这样声明:

(1)double (*(*e)[9])();

e是一个指向9维数组的指针,数组内为函数指针,该函数指针形参为空,返回类型为double。

这样的话,应该采用这样的typedef来简化声明:

typedef (*(*ptr)[9])();

(2)c语言函数指针typedef扩展阅读

typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

❸ C语言函数指针定义

函数指针就是函数的指针。它是一个指针,指向一个函数。看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(char * p1,char * p2); 看看上面三个表达式分别是什么意思? C):这很容易,fun3 是函数名,p1,p2 是参数,其类型为char *型,函数的返回值为char *类型。 B):也很简单,与C)表达式相比,唯一不同的就是函数的返回值类型为char**,是个二级指针。 A):fun1 是函数名吗?回忆一下前面讲解数组指针时的情形。我们说数组指针这么定义或许更清晰: int (*)[10] p; 再看看A)表达式与这里何其相似!明白了吧。这里fun1 不是什么函数名,而是一个指针变量,它指向一个函数。这个函数有两个指针类型的参数,函数的返回值也是一个指针。同样,我们把这个表达式改写一下:char * (*)(char * p1,char * p2) fun1;

❹ C语言中函数指针用法

在C语言中,指针被广泛使用,而函数指针是最为高级的用法之一,也是容易疑惑的地方之一。看下面这段代码:#include <stdio.h>void F(int a, int* output)
{
printf("a = %d\n", a);
*output = a + 1;
}typedef void (*FUNC)();int main()
{
FUNC f = F;
int ret = 0;
f(3, &ret);printf("ret = %d\n", ret);
return 0;
}上面看出 FUNC 的类型是与F的类型不匹配的,这样可以通过编译吗?答案是: 可以的。由于在C语言中编译函数的时候,是仅仅将其函数名作为该函数的
唯一标识,为其分配相应地址。所以虽然FUNC 与 F的类型不一致,但是对于编译器看来
都是两个地址,是无所谓的。用上面的特点,可以写出非常通用的函数指针类型,typedef int (*FUNC)(); 这里之所有要有返回值,是用来标识该函数是否执行成功的错误代码标志。 随说做了有一段时间的C了,但尽然没有搞明白函数指针的用法,见到了也没有好好研究,今天终于有时间了,在网上搜了一下,终于弄懂了.原来就是定义了一个指针变量,只不过形式有点怪罢了.其实还是当成指针用就行了!一般有两种用法:1定义函数指针int (*functionPoint)(int, int)----这只是定义了一个指向函数的指针int a(int a,int b)----------------这是与之相符的函数原型void main()-----------------------使用{ functionPoint = a;------------先赋值 functionPoint(1,2);----------调用
}2用typedef定义使用typedef int (*functionPoint)(int,int);----------定义了一种类型名为functionPoint的指针int a(int a, int b)-----------------------------函数原型void main(){ functionPoint fun;---------------------------定义指针 fun = a;-------------------------------------赋值 fun(1,2);---------------------------------使用
}函数就是这个函数的指针.

❺ C语言函数指针定义法

1
typedef int (*Fptr)(int , int );
Fptr fptr = NULL; (此处的Fptr是数据类型?)

使用了typedef,Fptr就是数据类型,代表int (*XXX)(int , int );这一堆

如果写成Fptr fptr,意思就是int (*fptr)(int , int );了

你的理解没有错,Fptr就是返回值是int,参数是两个int的函数指针类型,fptr才是函数指针变量

2
int (*Fptr)(int , int ) ;
Fptr = NULL; (此处的Fptr是函数指针变量?)

Fptr就是一个返回值是int,参数是两个int的函数指针变量了

❻ c语言如何使用typedef定义一个函数指针类型,该指针类型指向一个不需要参数,并且返回值为int

C语言中,使用typedef 定义一个函数指针类型的书写格式如下:

typedef 返回值类型 (*函数指针类型名称)(参数列表);

为方便理解,下面在手机上使用易历知食软件内部的微C程序设计来编程,演示其定义方式,并写个测试函数,再通过函数指针来调用测试函数,在手机上的代码如下图(图截取自手机):

❼ c语言中typedef的用法,

这是定义一个名字叫close_func_ptr_type的函数指针类型(一楼的说法有点不太准确哦,呵呵)


使用方法:

typedefvoid(*close_func_ptr_type)(void);

voidfunc(){
}

close_func_ptr_typepfunc=func;

❽ C语言定义函数指针时的typedef怎么理解

可以不用,如果你愿意一直写影响阅读的代码。

你可以比较两种方式的编写难度和阅读难度:注释和没注释的部分

typedef int zhengxing;//要定义别名的类型为int,定义的别名为zhengxing

typedef void (*intFunc)(int);//要定义的类型是void (*)(int),即参数一个int,什么也不返回的函数指针,定义的别名是intFunc。


typedefint(*ADD2_FUN)(int,int);
typedefint(*ADD3_FUN)(int,int,int);
staticintadd2(inta,intb)
{
returna+b;
}
staticintadd3(inta,intb,intc)
{
returna+b+c;
}
staticconstvoid*getFunPtr(constchar*name)
{
if(name)
{
if(strcmp(name,"add2")==0)
{
return(void*)&add2;
}
elseif(strcmp(name,"add3")==0)
{
return(void*)&add3;
}
}
returnNULL;
}
intmain()
{
/*int(*add3)(int,int,int)=(int(*)(int,int,int))getFunPtr("add3");
cout<<(*add3)(1,2,3)<<endl;*/
ADD3_FUNadd3=(ADD3_FUN)getFunPtr("add3");
cout<<(*add3)(1,2,3)<<endl;
return0;
}

❾ C语言typedef及函数指针疑惑

typedef void (*FunType)(int)
是定义了FunType为函数指针类型
以后可以用FunType直接声明函数。

void (*FunType)(int x);
声明FunType是一个函数指针。

❿ C语言函数指针的问题

typedefstructStateStruct{
void(*FuncPtr)(void*ptr)f;
}SS;
//定义了一个新的类型,这个类型是个结构体,类型名是SS
//下面声明一个SS类型的变量
SSs;
//s就是一个SS类型的变量
void(*FuncPtr)(void*ptr);
//是一个类型名,类型是FuncPtr,这是一个函数指针类型,这个函数指针类型是返回值是void,接受一个void*的指针地址的参数。
//一般使用typedef语法来用
typedefvoid(*FuncPtr)(void*ptr);
typedefstructStateStruct{
FuncPtrfp;
}SS;

承上

voidf(void*ptr)
{
}
//函数f就是一个funcPtr类型的函数。
//可以以下面的方法赋值:
s.fp=f;
constSSSt_StateInit={(void(*)(void*))State_Init};
//用下面的写法会好看很多
constSSSt_StateInit={(FuncPtr)State_Init};
//这是用State_Init来初始化fp的值。