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
无情的摸鱼机器