zoukankan      html  css  js  c++  java
  • 《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  
    ",a);  //hello world
        printf("  b = %s  
    ",b);  //hello world
    }
  • 相关阅读:
    《刀塔传奇》
    SSH端口转发
    objective-c与c++的差异
    mysql 远程连接速度慢的解决方案
    maven
    automapper 自动映射 集成asp.net Core2.1
    swagger 集成asp.net Core2.1
    asp.net Core 跨域配置
    处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    SharedPreferences
  • 原文地址:https://www.cnblogs.com/xuxianshen/p/13944406.html
Copyright © 2011-2022 走看看