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("\n");
        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\n",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("\n");
        return 0;
}

 

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

#include <stdio.h>
  
typedef void (*func_ptr)(int,int);

void Add(int x,int y)
{
        printf("x+y=%d\n",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

posted @ 2021-05-31 14:25  Wangtn  阅读(357)  评论(0编辑  收藏  举报