08. typedef关键字的使用
一、为什么需要typedef关键字
C++ 允许用户使用 typedef 来为一个数据类型起一个新的别名。一旦用户在程序中定义了别名,就可以在该程序中使用别名来定义变量的类型、数组的类型、指针变量的类型与函数的类型等。
typedef 关键字定义的名称并不是真的创造了一种数据类型,而是给已有的或者复合型的以及复杂的数据类型取一个我们更容易理解识别的别名。
二、typedef关键字的使用
使用关键字 typedef 可以为类型起一个新的别名。typedef 的用法一般为:
typedef oldName newName;
其中,oldName 是类型原来的名字,newName 是类型新的名字。
2.1、基本数据类型起别名
#include <iostream>
using namespace std;
typedef unsigned char uint8_t; //无符号8位整数
int main(void)
{
uint8_t ch = 'a';
cout << ch << endl;
return 0;
}
当我们使用 uint8_t 时,就和使用 unsigned char 是一样的。
2.2、数组类型起别名
#include <iostream>
using namespace std;
typedef int numbeArray10[10];
int main(void)
{
int i = 0;
numbeArray10 array = {0,1,2,3};
for(i = 0; i < 10; i++)
{
cout << array[i] << endl;
}
return 0;
}
其中 numberArray10 表示定义一个长度为 10 的整数数组。numberArray10 array 等价于 int array[10]。
2.3、指针数据类型起别名
#include <iostream>
using namespace std;
typedef char* pointer;
int main(void)
{
pointer p = "hello";
cout << p << endl;
return 0;
}
我们定义了一个指针类型,当我们使用 pointer p 声明一个指针变量,就和使用 char *p 的含义是一样的。
2.4、结构体类型起别名
#include <iostream>
using namespace std;
typedef struct Person
{
char name[20];
int age;
}person;
int main(void)
{
person p = {"Sakura",10};
cout << "name: " << p.name << ",age: " << p.age << endl;
return 0;
}
用 typedef 给结构体起别名的时候,可以省略结构体的类型名。
#include <iostream>
using namespace std;
typedef struct
{
char name[20];
int age;
}Person;
int main(void)
{
Person p = {"Sakura",10};
cout << "name: " << p.name << ", age = " << p.age << endl;
return 0;
}
2.5、枚举类型起别名
#include <iostream>
using namespace std;
typedef enum WEEK
{
MONDAY = 1,
THESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}Week;
int main(void)
{
Week week = WEDNESDAY;
cout << week << endl;
return 0;
}
用 typedef 给枚举类型起别名的时候,可以省略枚举的类型名。
#include <iostream>
using namespace std;
typedef enum
{
MONDAY = 1,
THESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}Week;
int main(void)
{
Week week = WEDNESDAY;
cout << week << endl;
return 0;
}