• C语言的typedef注意事项


    typedef是一个关键字,可以重命名一些数据类型也可以重定义一些新的数据类型。我们从以下几个角度去理解typedef。

    1.typedef和普通数据类型类型

    typedef int MYINT;
    int a = 10;
    MYINT B = 20;
    

    我们给int重命名成MYINT,这时候 int 和MYINT 是一样的,都可以定义变量,并且在32位平台都是32位的。

    2.typedef和结构体(重点)

    struct people 
    {
    	int age;
    	char sex;
    };
    

    上面创建了一个新的数据类型 strcut people,注意,这个是数据类型,数据类型不占内存。

    struct people p1,p2;
    

    这时候我们定义了两个变量,p1和p2,他们的数据类型是struct people,以后我们每次定义变量都要写struct people,是不是感觉很麻烦,使用typedef给它重命名一下就简单多了。

    typedef struct people
    {
    	int age;
    	char sex;
    }STRPEO; 
    

    这样struct people和STRPEO和struct people就有了一样的作用。以后我们在定义变量直接STRPEO p1,p2;是不是简单很多。
    我们再来定义一个该结构体的指针

    typedef struct people
    {
    int age;
    char sex;
    }*PSTRPEO;

    虽然* 和PSTRPEO很近,但是* 是和struct people 结合的,也就是说,PSTRPEO 的类型是struct people *

    STRPEO P1;			//定义结构体变量
    P1.age = 20;		//给结构体age成员赋值
    PSTRPEO P = &p1;	//使用结构体指针访问age成员
    printf("%d
    ",p->age);		//结果是  20  
    

    3.typedef和#define(重点)
    typedef是给类型重命名,相当于一个数据类型,而#define是宏定义,在程序预处理时期直接替换

    typedef int * PMYINT;
    
    MYINT a,b;		
    

    相当于 int a,int b,两个变量的数据类型都是int * **

    #define PMYINT int *
    
    PMYINT a,b;
    

    ** 宏定义是直接替换,在这就是用 int*替换掉PMYINT 相当于int a,b;a是int类型,b是int类型。**

    4.typedef和const(重点)

    回顾:const int * p; //指针p指向的变量是不可变得
    int * const p; //指针p本身是不可改变的

    typedef int* PINT;
    
    const PINT p1;
    PINT const p2;
    

    *按照我们平常的理解应该是const int p1;和int const p2;p1指向的变量是不可变的,p2指针本身是不可变的。经过代码验证我们发现,无论是const PINT p1;还是PINT const p2; 效果都等价于 int const ,p1和p2本身是不可变的。 那我们想让指针指向的变量不可变怎么办?

    typedef const int* CPINT;
    
    CPINT P1,CPINT P2;		//这样p1和p2本身可变,指向的变量不可变。
    

    5.typedef和函数指针

    函数:int * test(const char ,int );
    函数指针 int
    ( * ptest)(const char * ,int )

    我们每次定义这类函数的指针都要写这么长,很麻烦于是

    typedef int * ( * PTEST)(const char * ,int);

    以后我们在使用该函数指针时直接PTEST P1,P2;就可以了。

    6.使用typedef的意义
    使用typedef的好处就是简化类型的书写,创建与平台无关的数据类型,有利于代码移植,int在32位机器上就是32位的,在我们在32位机器上写的程序很可能无法在64位平台运行,我们可以把int用typedef重定义一下,即可增强代码的可移植性。

  • 相关阅读:
    文件操作
    xadmin的使用
    Vue
    Redis
    Django
    python小结
    利用线程池和回调函数爬虫
    drf-基表、断关联表关系、级联删除、正方向查询、子序列化
    drf序列化
    drf初识
  • 原文地址:https://www.cnblogs.com/1024E/p/13209619.html
Copyright © 2020-2023  润新知