很多同学对define很熟,对typedef也很熟,但是当define和typedef相遇的时候,就犯迷糊了。那么,define和typedef到底是什么关系?它们之间的区别在哪里?它们各自的含义是什么呢?请看下文
1、typedef 意思是重定义类型,它就相当于给较长的类型起一个简短的易懂的别名,但是并不是定义一个新的类型,就相当于在生活中你给你朋友起一个你认为好听又好记的小名,以后的称呼就是这个小名。typedef一般和struct在一块使用。例如,我们定义一个Student结构体,里面的成员有姓名、年龄、性别,则结构体定义为
struct Student
{
string name;
int age;
string sex;
};
这是最基本的定义结构体,当我们用这个结构体定义变量时,会写成struct Student s1。当使用了typedef以后,结构体定义就变成
typedef struct Student
{
string name;
int age;
string sex;
}Student;
然后用结构体定义变量时 就可以写成Student s1。这个例子比较简单,用typedef前后的优势不明显。如果是用 unsigned long long unit64这个类型定义一个变量的话,使用typedef就很容易了,直接就写成typedef unsigned long long unit64;unit64 b=10;
2、define的意思是字符替换,也相当于为类型取别名,同时还可以定义常量、变量等。例如#define SIZE 10;int arr[SIZE];这时候就说明数组的长度为10
3、区别
(1)typedef定义的语句结尾有分号,而define定义的语句结束后没有分号。
(2)对指针的操作中,二者修饰指针类型时,作用不同。
例如:typedef int* Pint;
#define PINT int*
int i=1; int j=2;
const Pint p1=&i;//p1可以更改,p1指向的内容可以更改,相当于int *const p1
const PINT p2=&j;//p2可以更改,p2指向的内容不能更改,相当于const int *p2
Pint d,e;//相当于int *d,int *e.两个变量都是int *类型
PINT f,h;//相当于int *f,h.只有一个是指针
int i=10;
d=&i;e=&i;f=&i;//因为d,e,f都是指针类型,所以可以保存变量的地址
h=i;//h是int类型,所以直接赋值