zoukankan      html  css  js  c++  java
  • typedef用法

    typedef的作用就是起别名

    可以用来给数组,指针,结构体定义别名

    1.typedef为数组类型定义别名

    #include <stdio.h>
      
    typedef char str1[20];
    
    int main(void)
    {
            str1 arr;
            printf("%d",int(sizeof(str1)/sizeof(char)));
            for(int i=0;i<int(sizeof(str1)/sizeof(char));++i)
                    scanf("%c",&arr[i]);
            for(int i=0;i<int(sizeof(str1)/sizeof(char));++i)
                    printf("%c ",arr[i]);
            printf("
    ");
            return 0;
    }

    str1就是长度为20的char类型数组的别名

    2.typedef为结构体类型定义别名

    #include <stdio.h>
      
    typedef struct abc{
            int a;
            int b;
            void add(int x,int y)
            {
                    a=x;
                    b=y;
                    printf("a+b=%d
    ",a+b);
            }
    }MyStruct;
    
    int main(void)
    {
            MyStruct mystruct;
            mystruct.add(12,31);
            MyStruct* struct_ptr=new(MyStruct);
            struct_ptr->add(111,321);
            return 0;
    }

    3.typedef为指针类型定义别名

    #include <stdio.h>
      
    typedef int* intptr;
    
    int main(void)
    {
            intptr a;
            a=new(int[3]);
            for(int i=0;i<3;++i)
                    scanf("%d",&a[i]);
           
            for(int i=0;;++i)
                    printf("%d ",a[i]);
            printf("
    ");
            return 0;
    }

    4.typedef为函数指针定义别名

    #include <stdio.h>
      
    typedef void (*func_ptr)(int,int);
    
    void Add(int x,int y)
    {
            printf("x+y=%d
    ",x+y);
    
    }
    
    int main(void)
    {
            func_ptr fp=Add;
            (*fp)(2,3);       
            return 0;
    }

    使用typedef其别名的时候一定要给*func_ptr加上括号,否则就是在定义一个返回值为void*的普通函数,而非函数指针。同理,在调用的时候也要给*fp加上括号,否则就是访问函数返回值的地址了

    5.typedef和#define的区别

    typedef是起别名而#define是单纯的替换

    #define INTERGE int
    unsigned INTERGE n;

    #define这样写是没问题的,因为在编译的时候INTERGE会被替换成int

    typedef int INTERGE;
    unsigned INTERGE n;

    但是typedef这样写是不行的

    #define PTR_INT int *
    PTR_INT p1, p2;

    编译的时候PTR_INT会被替换成int *,所以p1是int指针,而p2是普通的int

    typedef int * PTR_INT
    PTR_INT p1, p2;

    而用typedef来处理的话,p1,p2都是指针,他们的类型是相同点,因为int*被定义为一个新的数据类型

    所以在给指针其别名的时候要用typedef而不要使用宏定义#define

    无情的摸鱼机器
  • 相关阅读:
    第52周二Restful
    第52周一
    第51周日
    第51周六
    第51周五
    第51周四
    第51周三
    第51周二
    第51周一
    第50周日
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/14831309.html
Copyright © 2011-2022 走看看