作用
typedef是C语言的一个重要的关键字,是为数据类型的定义一个新的名字。也就是类型的别名。
下面我们直接先上例子吧
例: 定义一个int 型变量,并对其赋值,输出变量的值
#include<stdio.h>
int main(void)
{
int a = 10;
printf("a = %d", a);
return 0;
}
如果我想使A代表int类型呢?也就是A是int的别名
#include<stdio.h>
typedef int A;
int main(void)
{
A a = 10;
printf("a = %d", a);
return 0;
}
那么,问题来了,typedef的这种行为和我们之前学习的#define宏定义有什么区别呢?
Typedef 与 #define宏的区别
首先,在举例子之前,先回顾一个小知识:
int* a,b;//在这里,不符合我们的意图,它只声明了一个指向整型的指针a和
//一个整型变量b
那么我们如何使 b也成为整型指针
typedef int* PINT;
PINT a,b ;//此时,a,b都为指向整型的指针变量
下面感受一下这个例子:
#include <stdio.h>
typedef int INT;
typedef int* PINT;
int main()
{
INT a = 10;
PINT b, c;//b,c都为指向整型的指针
b = &a;//b指向a
c = b;//c 也指向a
printf("addr of a = %p\n", c);//打印a的地址
return 0;
}
那么,使用#define宏是否也可以实现?
#include <stdio.h>
typedef int INT;
#define PINT int*//此处不加;初学者往往容易出错
int main()
{
INT a = 10;
PINT b, c;//
b = &a;
c = b;
printf("addr of a = %p\n", c);//打印 a 的地址
return 0;
}
此时,编译器报错,原因是:
#define PINT int*
PINT b,c;//相当于 int* b,c;只有b为指针,c为整型变量
故,当打印地址时,出现错误
所以,相比起宏定义的直接替换,typedef是对类型的封装
typedef与结构体的配合
=等待更新=====