《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 \n",a); //hello world printf(" b = %s \n",b); //hello world }