目录
(1)原理不同
(2)功能不同
(3)作用域不同
(4)对指针的操作不同
(5)补充
a.指针常量
b.常量指针
typedef和define都是替一个对象取一个别名,以此增强程序的可读性,区别如下:
#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。不仅使程序书写简单,也使名称更加的意义明确,增强可读性。
#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。
typedef用来定义类型的别名,起到类型易于记忆的功能。
#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用,而typedef有自己的作用域。
#define INTPTR1 int*
typedef int* INTPTR2;
1. INTPTR1 p1, p2;
2. INTPTR2 p3, p4;
3. int* a,b;
含义分别为:
声明一个指针变量p1和一个整型变量p2
声明两个指针变量p3、p4
声明一个指针变量a和一个整型变量b
总结:#define看起来就比较愚蠢,就是简单的将INTPTR1替换成int* 也就是说1与3是等价的意思,而typedef是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。
这里看一道题:
结果 为什么不是6,却是8呢?
:还是那句话#define是比较愚蠢的,所以凡是看到M的地方就直接换成N+1所以就是(N+1+1)×N+1/2.由于我们此处是整型运算,所以结果是等于8,而不是8.5。
再来一道:
留给你们思考了!
int a=10,b=20;
int* const p = &a;
p = &b;//这里是不允许对变量p指向的地址进行更改,因为p此时具有常属性。
*p=20;//这里是允许对*p进行更改的。
const int* p = &a;
p = &b;//这里是允许对变量p指向的地址进行更改。
*p=20;//这里是不允许更改的,因为*p指向的内容具有常属性。