精华内容
下载资源
问答
  • 关于typedef int ( ) ( )的用法

    千次阅读 2016-12-12 09:06:32
    typedef S32 (*IntCallback)...这是我看到的原型,之前有typedef int S32,当时一下子没看出来,傻了,后来在网上看到别人说的typedef的用法中特意提到这个用法:函数指针 写了个小例子: ////////////////////

    typedef S32             (*IntCallback)(SimObject *obj, S32 argc, const char *argv[]);

    这是我看到的原型,之前有typedef int S32,当时一下子没看出来,傻了,后来在网上看到别人说的typedef的用法中特意提到这个用法:函数指针

    写了个小例子:

    //func.h

    int add_(int a,int b)
    {
     return a+b;
    }
    int multiply_(int a ,int b)
    {
     return a*b;
    }
    int minus_(int a,int b)
    {
     return a-b;
    }
    int div_(int a ,int b)
    {
     return a/b;
    }
    typedef int (*pfunc)(int ,int);

    //main.cpp

    #include <iostream>
    #include "func.h"
    using namespace std;
    int main()
    {
     int aa =6,bb=3;
     pfunc p = add_;//用pfunc来定义一个指向函数的指针变量,pfunc就是一种类型而已
     cout << p(aa,bb) <<endl;
     p = multiply_;
     cout <<p(aa,bb) <<endl;
     p = minus_;
     cout <<p(aa,bb) <<endl;
     p = div_;
     cout <<p(aa,bb) << endl;
     return 0;
    }

    展开全文
  • typedef介绍

    万次阅读 多人点赞 2019-08-21 17:18:48
    typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 typedef本身是一种存储类的关键字,与auto、extern、static、...

    [20210330更新]:这篇博客写的时间有点久了:)。本次更新修改了博客内容中的错误和表述不当的地方。


    本文介绍C语言中的关键字 typedef 的用法。

    1 概述

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

    typedef 本身是一种存储类的关键字,与 auto、extern、static、register 等关键字不能出现在同一个表达式中。

    2 作用及用法

    2.1 typedef的用法

    使用 typedef 定义新类型的方法(步骤):在传统的变量声明表达式里,用(新的)类型名替换变量名,然后把关键字 typedef 加在该语句的开头就可以了。

    下面以两个示例,描述 typedef 的用法步骤。

    示例1:

    【第一步】:int a; ———— 传统变量声明表达式
    【第二步】:int myint_t; ———— 使用新的类型名myint_t替换变量名a
    【第三步】:typedef int myint_t; ———— 在语句开头加上typedef关键字,myint_t就是我们定义的新类型

    示例2:

    【第一步】:void (*pfunA)(int a); ———— 传统变量(函数)声明表达式
    【第二步】:void (*PFUNA)(int a); ———— 使用新的类型名PFUNA替换变量名pfunA
    【第三步】:typedef void (*PFUNA)(int a); ———— 在语句开头加上typedef关键字,PFUNA就是我们定义的新类型

    特别强调:上述两个示例,仅仅为了演示 typedef 的用法步骤,便于新手记忆 typedef 的用法。在实际编写代码时,只有“第三步”对应的语句会写入代码中!

    2.2 typedef的作用

    typedef 的作用有以下几点:

    1)typedef 的一个重要用途是定义机器无关的类型。例如,定义一个叫“REAL”的浮点类型,该浮点类型在目标机器上可以获得最高的精度:

    typedef long double REAL;

    如果在不支持 long double 的机器上运行相关代码,只需要修改对应的 typedef 语句,例如:

    typedef double REAL;

    或者:

    typedef float REAL;

    2)使用 typedef 为现有类型创建别名,给变量定义一个易于记忆且意义明确的新名字。例如:

    typedef unsigned int UINT

    3)使用 typedef 简化一些比较复杂的类型声明,例如:

    typedef void (*PFunCallBack)(char* pMsg, unsigned int nMsgLen);

    上述声明引入了 PFunCallBack 类型作为函数指针的同义字,该函数有两个类型分别为 char* 和 unsigned int 参数,以及一个类型为 void 的返回值。通常,当某个函数的参数是一个回调函数时,可能会用到 typedef 简化声明。

    例如,承接上面的示例,我们再列举下列示例:

    RedisSubCommand(const string& strKey, PFunCallBack pFunCallback, bool bOnlyOne);

    注意:类型名 PFunCallBack 与变量名 pFunCallback 的大小写区别。

    RedisSubCommand 函数的参数是一个 PFunCallBack 类型的回调函数,返回某个函数(pFunCallback)的地址。在这个示例中,如果不用 typedef,RedisSubCommand函数声明如下:

    RedisSubCommand(const string& strKey, void (*pFunCallback)(char* pMsg, unsigned int nMsgLen), bool bOnlyOne); 

    从上面两条函数声明可以看出,不使用 typedef 的情况下,RedisSubCommand 函数的声明复杂得多,不利于代码的理解,并且增加的出错风险。

    所以,在某些复杂的类型声明中,使用 typedef 进行声明的简化是很有必要的。

    3 typedef与#define

    两者的区别如下:

    • #define 进行简单的进行字符串替换。 #define 宏定义可以使用 #ifdef、#ifndef 等来进行逻辑判断,还可以使用 #undef 来取消定义。
    • typedef 是为一个类型起新名字。typedef 符合(C语言)范围规则,使用 typedef 定义的变量类型,其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。

    通常,使用 typedef 要比使用 #define 要好,特别是在有指针的场合里。

    下面列举几个示例。

    3.1 示例1

    代码如下:

    typedef char* pStr1;
    #define pStr2 char* 
    pStr1 s1, s2;
    pStr2 s3, s4;

    在上述的变量定义中,s1、s2、s3都被定义为 char* 类型;但是s4则定义成了 char 类型,而不是我们所预期的指针变量 char*,这是因为 #define 只做简单的字符串替换,替换后的相关代码等同于为:

    char* s3, s4;

    而使用 typedef 为 char* 定义了新类型 pStr1 后,相关代码等同于为:

    char *s3, *s4;

    3.1 示例2

    代码如下:

    typedef char *pStr;
    char string[5]="test";
    const char *p1=string;
    const pStr p2=string;
    p1++;
    p2++;

    在编译过程中,报错如下:

    根据上述错误信息能够看出,p2 为只读常量,所以 p2++ 出错了。这个问题再一次提醒我们:typedef 和 #define 不同,typedef 不是简单的文本替换,上述代码中 const pStr p2 并不等于 const char * p2,pStr 是作为一个类型存在的,所以 const pStr p2 实际上是限制了 pStr 类型的 p2 变量,对 p2 常量进行了只读限制。也就是说,const pStr p2 和 pStr const p2 本质上没有区别(可类比 const int p2 和 int const p2),都是对变量 p2 进行只读限制,只不过此处变量 p2 的数据类型是我们自己定义的 pStr,而不是系统固有类型(如 int)而已。

    所以,const pStr p2 的含义是:限定数据类型为 char * 的变量 p2 为只读,因此 p2++ 错误。

    注意:在本示例中,typedef 定义的新类型与编译系统固有的类型没有差别。

     

    展开全文
  • typedef int ElemType的理解

    千次阅读 多人点赞 2020-03-11 18:51:18
    typedef int ElemType; 为什么呀,我倒是知道后面用ElemType定义别的数据类型,看起来是把ElemType和int一样啦,那直接用int不用行了,为什么要用ElemType.这是定义一个线性表元素类型的 最佳...

    From:https://blog.csdn.net/zhuzhihai1988/article/details/8233465

    1   typedef int ElemType;

    为什么呀,我倒是知道后面用ElemType定义别的数据类型,看起来是把ElemType和int一样啦,那直接用int不用行了,为什么要用ElemType.这是定义一个线性表元素类型的

    最佳答案

    定义不同的数据类型名称是为了程序的可读性.

    而且一旦你需要将类型变换比如使用double型的了,只要写:

    typedef double ElemType;

    一下子就全改了,如果没有定义的话就要一个个的把int改成double,你不嫌麻烦么

     

    2      typedef int(*CallBack)(char *p);这个太难理解了,怎么理解呢?

    typedef int a

    这个我就知道是什么意思,就是把a还代替int,请问

    typedef int(*CallBack)(char *p),

    这个又是什么意思呢?

    typedef int(*CallBack)(char *p);

    变量名:CallBack

    1.*CallBack:CallBack是一个指针

    2.(*CallBack)():指向一个函数

    3.(*CallBack)(char *p):这个函数有一个参数,类型为char*

    4.int(*CallBack)(char *p):这个函数有一个返回值,类型为int

    最终:CallBack是一个指针,指向具有一个char*类型参数,且返回一个int型数据的函数

    前面有个typedef,所以现在CallBack是这种类型的别名

    int func(char *p){

    ...

    }

    ...

    CallBack my_callback1 = func;//OK

    CallBack my_callback2 = &func;//OK

    以上二者均可

    展开全文
  • typedef

    千次阅读 多人点赞 2019-07-09 16:23:46
    使用typedef注意事项 typedef语句不能创造新的类型,只能为已有的类型重新命名,也就是说原来的类型名仍然可以使用。 typedef语句只能用来定义类型...举个例子 typedef int COUNTER;COUNTER i,n;与int i,n等价。 ...

    使用typedef注意事项

    1. typedef语句不能创造新的类型,只能为已有的类型重新命名,也就是说原来的类型名仍然可以使用。
    2. typedef语句只能用来定义类型名,而不能用来定义变量。
    3. 举个例子 typedef int COUNTER;COUNTER i,n;与int i,n等价。
    展开全文
  • typedef int(*P)(int )

    2020-09-16 10:46:25
    typedef int(*P)(int ) typedef 主要的作用是给变量取别名,但是存在一些比较特殊的用法。可用于通过给函数起别名的方式定义回调函数。 typedef int(*P)(int ) 这里相当于是给函数指针 P 起了个别名。那么可以用 P ...
  • 原文地址:http://blog.csdn.net/baoendemao/article/details/41209697 原文地址:... typedef int(FUNC1)(int in); ...typedef int(FUNC2)(int *,int *,int *); 上面的语句作用是 作一个函数声明
  • typedef int (* func)(int ,int ) int (* func)(int ,int ) 一个函数指针的声明 typedef 定义了一个 函数指针声明的***类型*** func 作为一个类型 可以 声明 变量/。 func a = 函数; ...
  • typedef 的详细用法详见:https://baike.baidu.com/item/typedef/9558154?fr=aladdin
  • typedef int (*funp_t)(int)定义一个函数指针类型 funp_t; 而typedef int (fun_t)(int)定义一个函数类型 fun_t; funp_t p; // 定义一个类型是 int ( *) ( int ) 的变量p,即:函数指针p fun_t p; // 声明...
  • typedef void(*F)(int)理解

    2020-02-26 15:17:15
    typedef void (*F) (int)定义了一个指向函数的指针F,其指向的函数的返回值为 void 类型,参数是后面的(int). 然后我们就可以直接使用 F来定义这种指针变量,比如: F f; // 等价于void f(int); 举例: #include &...
  • (可能有错误的理解,请大家指出* =*) 1) #define a int[10] (全错,直接文本替换) A) a[10] a[10];  B) a[10] a; C) int a[10]; D) int a; E) a b[10]; F) a b; ...2) typedef in
  • typedef int(FUNC1) (int in)

    千次阅读 2018-07-20 14:29:59
    首先看一个例子: #include &lt;stdio.h&gt; int inc(int a) { return (++a); } int multi(int *a,int *b,int *c) ...typedef int (FUNC1) (int );...typedef int (FUNC2) (int *, i...
  • typedef int int_array[4]

    千次阅读 2015-03-29 21:37:49
    这个出现在C++prime第四版第124页,刚看没理解#include using namespace std; int main() { int ia[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};... typedef int int_array[4]; for(int_array *p=ia;p!=ia+3;++p)
  • typedef pair<int,int> p; int main() { int n; while(~scanf("%d",&n)) { int i,j,ans=0; map,int> a; a.clear(); for(i=0;i;i++) { scanf("%d %d",&x[i],&y[i]); for(j=0;j;j++) { ans+=a[p(x[i]+x[j]...
  • typedef struct 和 struct的使用

    千次阅读 2018-08-24 18:14:43
    typedef struct 和 struct的使用 //以下student是标识符(标识符是用户编程时使用的名字,对于变量、常量、函数、语句块也有名 字;),stu则为变量类型(类比int和char等),pstu相当于(int*)。 typedef struct...
  • typedef int status

    千次阅读 2013-09-30 11:25:00
    是个自定义类型的语句,typedef用来定义类型的别名,statusi就相当于inti 转载于:https://www.cnblogs.com/seasonsstory/p/3347011.html
  • typedef int Long_int[3]是什么意思? typedef是定义别名的 typedef int long_int[3] 这样是定义了一个int型,但为什么后面会有[3]的,这不是字符的定义么? ------解决思路---------------------- 定义一个 ...
  • typedef int a[10];怎么解释? typedef int a[10]; a b[10]; 为什么分配400个字节的空间? int a[10];为什么分配了40个字节的空间? 问题:应该怎么解释typedef的这种行为...
  • typedef int ElemType

    千次阅读 多人点赞 2012-11-28 10:57:15
    typedef int ElemType; 为什么呀,我倒是知道后面用ElemType定义别的数据类型,看起来是把ElemType和int一样啦,那直接用int不用行了,为什么要用ElemType.这是定义一个线性表元素类型的 最佳答案 ...
  • C/C++ typedef的理解 typedef void (*pfunc)(int); 初学时: typedef int XXX,给类型int取一个别名xxx,嗯我懂了,EZ。 一段时间过后: typedef void (*pfunc)(int); ???将void取别名(*pfunc)(int)?不对啊,...
  • 最近在看uboot启动流程源码中看到了这一个用法,特此记录...typedef int (*init_fnc_t)(void); static init_fnc_t init_sequence_f[] = { setup_ram_buf, setup_mon_len, initf_console_record } typedef...
  • typedef int* PINT与#define PINT int*的区别

    千次阅读 2017-03-09 17:48:54
    这是一个很多人都不会用错但是却不甚了解的知识点,(正因为不会用...typedef int* PINT_TYPconst int * a; const PINT_DEF b; const PINT_DEF c;有人认为上面三条语句在typedef与#define替换之后皆一样,亦即:const i
  • typedef用法详解

    千次阅读 2020-10-14 15:54:38
    typedef与#define的区别: (1)typedef创建的符号名只限于类型,不限于值 (2)typedef由编译器解释,不是预处理器 ...typedef unsigned int size; typedef unsigned int16 u16; typedef unsigned int8 u8; . . .
  • 关于typedef int (*pFunc)(int, int)

    千次阅读 2013-08-15 22:32:25
    typedef int (*pFunc)(int, int) 申明一个指针变量pFunc, 指向int (*)(int, int) 从而可以 pFunc func; int add(int a,int b){ return (a+b); } typedef int (* func)(int ,int ) ; void main(){ ...
  • typedef int (*funcptr)() 用法

    千次阅读 2017-11-09 20:18:19
    typedef int (*funcptr)(); 什么意思 定义一个函数指针类型。 比如你有三个函数: void hello(void) { printf("你好!"); } void bye(void) { printf("再见!"); } void ok(void) { printf("好的...
  • typedef int Long_int [3]个人理解

    千次阅读 2014-09-07 10:20:43
    定义长整数为: typedefintLong_int[3] /* typedef: typedef与#define有些类似,但在一些复杂用法上就不同了。 1.定义一种类型的别名 2.用在旧的C代码中,帮助struct.以前的代码中,生命struct新对象时,必须...
  • 1,typedef void fun(int)类型 声明:typedef void alias(int) , 定义函数 void fun(int a){ ptintf("%d = a\n",a);} 这是可以可以这样用,alias * a = fun; 调用 #include typedef void alias(int); int main...
  • 感觉这个括号不需要吧,如果要写一个程序验证一下,应该怎么弄呢
  • lpAddFun是typedef定义的一个名称 可以用来定义变量 比如 lpAddFun p; 那 p就是 int(*p)(int, int); 首先(*p)说明p是一个指针,(*p)();说明p指向函数 (*p)(int, int)说明p指向的函数有两个int类型参数, 最后 int(*...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,046,835
精华内容 418,734
关键字:

inttypedef