• typedef为指针定义别名


    对指针和函数指针定义别名涉及到优先级,查看《C语言声明的优先级》那篇

    1、

    C语言typedef的用法详解 (biancheng.net)

    typedef char CHAR20[20];    //CHAR20是类型char [20]的别名。它是一个长度为 20 的数组类型
    CHAR20 a1, a2, a3, a4;     //char a1[20], a2[20], a3[20], a4[20]
    #include <stdio.h>
     
    typedef char (*PTR_TO_ADDR)[30];             //PTR_TO_ARR是二位数组char *[30]的别名,是二维数组指针类型
      
    char str[3][30] = {
        "hello",
        "world",
        "!"
    };
     
    int main()
    {
        PTR_TO_ADDR paddr = str;    int i;
            for(i=0; i<3; i++)
        {
            printf("%s  ", paddr[i]);   
        }
    }

    运行结果:

    hello  world  !  

     2、typedef

    学习链接:初识 typedef void(*Func)(void) (qq.com)

    void (* fun)(void)

    fun是一个变量,它是个指针,指向一个函数,函数的参数和返回值都是空,fun是一个指向参数和返回值都为空的函数指针。

    type void (* fun)(void)是函数指针的类型定义,代表了一种新的类型,声明一种void (*)(void)类型的函数指针fun。

    typedef为现有类型创建一个新的名字,typedef能隐藏笨拙的语法构造以及平台一些相关的数据类型,增强代码可维护性、可移植性、可读性

    #include <stdio.h>

    typedef void (*PTR_TO_FUN)(int, int); //PTR_TO_FUN是一个函数指针

    void max(int a, int b){
      int c;
      c = a>b ? a : b;
      printf("%d ", c);
    }

    int main()
    {
      PTR_TO_FUN pfun = &max; //&可加可不加

      pfun(10, 20); //第一种调用方式
      (*pfun)(10, 20); //第二种调用方式
    }

    结果:

    20
    20

     

    3、typedef 和 #define 的区别

    typedef 是在编译过程中被解析的,而#define是在编译之前的预处理阶段处理的#define只是对所定义的别名的简单替换,而typedef可以做到#define能做到的所有事情,而且可以做得更好

    (1)可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做

    #define INTERGE int
    unsigned INTERGE n;  //没问题
    
    typedef int INTERGE;
    unsigned INTERGE n;  //错误,不能在 INTERGE 前面添加 unsigned

    (2)在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证

    #define PTR_INT int *
    PTR_INT p1, p2;     //int *p1, p2;
    typedef int * PTR_INT
    PTR_INT p1, p2;           //int *p1, *p2;
  • 相关阅读:
    ESM CORR
    格式化用jad反编译混淆过的代码,能去大部分错误 (zhuanzai)
    Simple Event Correlation installation and configuration
    linux系统时间和硬件时钟问题(date和hwclock)
    float:center???
    [Android]Volley源代码分析(二)Cache
    iTOP-4412 开发板的 GPIO 是怎么操作的?
    Android手掌抑制功能的实现
    第十二周项目3-摩托车继承自行车和电动车
    面对苦难请勇敢
  • 原文地址:https://www.cnblogs.com/keepdoing123/p/14772721.html
Copyright © 2020-2023  润新知