描述作用
1.typedef主要通途给类型起一个别名,比如给int类型取个中文名字 zhengxingint。
2.typedef可以简化struct关键字
3.typedef可以区分数据类型
4.typedef提高代码的平台可移植性。

举例 取别名
cpp
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
void test1()
{
typedef int zhengxingint;//定义一个int 类型的别名,整型int
zhengxingint i = 10; //使用别名定义一个局部变量
printf("i = %d\n", i);//打印结果
}
int main()
{
test1();
system("pause");
return EXIT_SUCCESS;
}
运行结果

举例 取别名 struct
cpp
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
//创建结构体
//1.typedef 使用 简化结构体关键字
struct Person {
char name[50];
int age;
};
typedef struct Person myPerson;
//2.简化给类型取别名
//语法:typedef 结构体 原名 别名
typedef struct Person2 {
char name[50];
int age;
} myPerson2;
void test2()
{
myPerson p_person = { "达帮主",18 };
printf("name : %s age : %d\n",p_person.name,p_person.age);
myPerson2 p_person2 = {"达帮主",19};
printf("name : %s age : %d \n",p_person2.name,p_person2.age);
}
int main()
{
//test1();
test2();
system("pause");
return EXIT_SUCCESS;
}
运行结果

举例 区分数据类型
cpp
//区分数据类型
void test3()
{
char* p1, p2;
printf("p1 : %d p2 : %d\n",sizeof(p1),sizeof(p2));
}
可以查看以上定义 首先p1 和 p2是由区别的。p1是指针,p2是char类型,可以通过sizeof来看看
运行结果:

p1的大小是 4 ,p2 的大小是1 。指针按照每个编译器分配字节有些是分配 4个字节,有些8个字节。
可以通过C++来确认类型
cpp
#include "iostream"
using namespace std;
int main()
{
char* p1, p2;
printf("p1 类型 %s \n", typeid(p1).name());
printf("p2 类型 %s \n", typeid(p2).name());
system("puase");
return EXIT_SUCCESS;
}
运行结果

区分数据类型
cpp
//区分数据类型
void test3()
{
char* p1, p2;
printf("p1 : %d p2 : %d\n",sizeof(p1),sizeof(p2));
//区分类型
typedef char* PCHAR;
PCHAR pp1, pp2; //都是char*类型
printf("pp1 : %d pp2 : %d\n", sizeof(pp1), sizeof(pp2));
}
运行结果

不按照这种方法定义也行,可以通过 char *p1,*p2 ,也是可以的
举例子 提高代码可移植性
在早期存在一下类型 long long,如果我们在当前的系统中可以正常使用long long,但是换一个机型可能不支持long long需要修改,这个时候,如果10w行long long 这样需要修改10w次。如果使用typedef那么移植性就很强,只要修改定义就行
案例
cpp
//提高可移植性
int typedef MYINT; //typedef long long MYINT ;只需要替换类型 long long 即可
void test4()
{
long long a1;
long long a2;
//...
MYINT a3;//如果主体发生变化,只需要改主体的类型即可
MYINT a4;
}
int main()
{
//test1();
//test2();
test3();
system("pause");
return EXIT_SUCCESS;
}