《C语言笔记:typedef关键字的用法》

一,typedef关键字

  1,C语言中的类型一共有两种:一种是编译器定义的原生类型(基础数据类型,比如int char float double);第二种是用户自定义的类型,不是语言自带的而是程序员自己定义的(比如数组指针、指针数组、函数指针、结构体类型、函数类型等)。

  2,有时候自定义类型太长了,用起来不方便,所有用typedef给它重命名一个短点的名字。

  3,需要注意的是,typedef是给类型重命名,也就是typedef加工出来的是数据类型,而不是变量(不会分配内存)。类型是一个数据模板,变量是一个实在的数据。类型是不占内存的,而变量是要占内存的。

二,typedef与#define的区别

  typedef char * TYPcahr;

  #define DEPchar  char * 

#include<stdio.h>

typedef char * TYchar;
#define DEchar  char *

int main(void)
{
    TYchar p1,p2;   //相当于 char *p1;char *p2

    DEchar p3,p4;   //相当于 char *p3,p4;    char *p3;char p4

    char c = 0;

    p1 = &c;
    p2 = &c;

    p3 = &c;
    p4 = &c;     //类型不匹配
    p4 = c;
    
}

 

三,typedef和结构体

  1,结构体在使用时都是先定义结构体类型,再用结构体类型去定义变量。

  2,C语言语法规定,结构体类型使用时必须是struct+结构体类型名+结构体变量名;这样的方式来定义变量。

  3,使用typedef一次定义两个类型,分别是结构体变量类型,和结构体变量指针类型。

四,tpyedef和const

  typedef int *PINT;

  1,const PINT p2;  实际的意思并不是 const int *p2,而是int *const p2;

  2,PINT const p2;相当于 int *const p2;

  3,要想定义 const int *p2; 只能typedef const int * CPINT;    CPINT  p2;

五,typedef和函数指针

  比如 char *strcpy(char *dest,const char *src)的函数指针。

  typedef char *( *Pstrcpy)(char *,const char *);

  Pstrcpy p1;   //p1是一个指向strcpy函数类型的指针

  Pstrcpy p2;  //p2是一个指向strcpy函数类型的指针

#include<stdio.h>
#include<string.h>

typedef char *(*Pstrcpy)(char *,const char *);


int main(void)
{
    char a[32] = {0};
    char b[32] = {0};
    Pstrcpy p1,p2;
    p1 = strcpy;
    p2 = strcpy;

    p1(a,"hello world");
    p2(b,"hello world");
    printf("  a = %s  \n",a);  //hello world
    printf("  b = %s  \n",b);  //hello world
}
posted @ 2020-11-08 15:05  xuxianshen  阅读(146)  评论(0编辑  收藏  举报