一.概述:
我们可以使用typedef关键字为各种数据类型定义一个新名字(别名)。
二.typedef的使用:
1.简单使用:
跟原来的基本类型是完全一样的。
2.在别名基础上再起别名:
3.typedef 与指针:
4.使用typedef给结构体起别名
也可以这样:
也可以省略结构体的名称。
5.结构体与指针:
6.typedef与枚举类型:
7.typedef与指向函数的指针:
给指向函数的int指针类型,起了个别名叫MySum,被指向的函数接收2个int类型的参数,返回值为int类型。
三.typedef与#define对指针类型对不同
typedef char *String1;
int main(){
String1 str = "hello world";
}
#define String2 char *
int main(){
String2 str = "hello world";
}
这两个定义是不一样的,但运行效果都是一样的:定义了一个字符串“hello world”;
第一段代码,用typedef给char * 定义别名为String
第二段代码,用宏名代替 char *
这样好像看不出,它们区别何在!!!
看例子:
typedef char *String1;
#define String2 char *;
int main(){
String1 str1,str2;
String2 str3,str4;
return 0;
}
总共定义了 4 个变量,
注意:在这种情况下,只有str1、str2、str3才是指向char类型的指针变量,str4只是个char类型变量。
原因:
我们如果连续声明两个int类型的变量,我们可以这样写:
int a,b;
相当于
int a;
int b;
以此类推:
typedef char *String1;
String1 str1,str2;
等于:
char *str1;
char *str2;
再看看宏定义情况:
#define String2 char *
String2 str3,str4;
因为宏定义纯粹的是字符串替换,用char * 代替String2
所以等于:
char *str3,str4;
其实也就相当于:
char *str3;
char str4
可以看出,只有str4是基本数据类型,str1、str2、str3都是指针类型。
所以,以后给类型起别名,最好使用typedef,而不是使用#define