typedef是给一个类型起一个别名(后面有分号)
宏定义是单纯的字符替换(后面无分号)
1.typedef:它在自己的作用域内给一个已经存在的类型一个别名。它是在是在编译时处理的。
//头文件
#include<typeinfo>
typedef unsigned long long int uint64;//给类型unsigned long long int起一个别名uint64
typedef int ARR[10]; //给长度为10的整型数组起一个别名ARR
typedef struct Student //给结构体struct Student {int age;ARR num;}起一个别名struct Student
{
int age;
ARR num;
}Student;
typedef struct Student //给结构体指针struct Student {int age;ARR num;}Student, *起一个别名PStudent
{
int age;
ARR num;
}Student,* PStudent;
2.宏定义:是预处理指令。在编译预处理时进行简单的替换
#define N 10;
int main()
{
printf("%d",N);
return 0;
}
举个栗子:
//用两种方式定义int*
typedef int* Pint1;
#define Pint2 int*
int main()
{
Pint1 a, b; //等同于int* a,* b;
Pint2 c, d;//等同于int* c, d;
return 0;
}
从上述可以看出#define只是单纯的替换