#define与typedef的区别

目录

(1)原理不同

(2)功能不同

(3)作用域不同

(4)对指针的操作不同

(5)补充

a.指针常量

b.常量指针


typedef和define都是替一个对象取一个别名,以此增强程序的可读性,区别如下:

(1)原理不同

 #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。

typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。不仅使程序书写简单,也使名称更加的意义明确,增强可读性。

(2)功能不同

#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。

typedef用来定义类型的别名,起到类型易于记忆的功能。

(3)作用域不同

#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用,而typedef有自己的作用域。

(4)对指针的操作不同

#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是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。
 

这里看一道题:

#define与typedef的区别_第1张图片

结果 为什么不是6,却是8呢?

:还是那句话#define是比较愚蠢的,所以凡是看到M的地方就直接换成N+1所以就是(N+1+1)×N+1/2.由于我们此处是整型运算,所以结果是等于8,而不是8.5。


再来一道:

#define与typedef的区别_第2张图片 #define与typedef的区别_第3张图片

 留给你们思考了!

 

(5)补充

int a=10,b=20;

a.指针常量

int* const p = &a;
p = &b;//这里是不允许对变量p指向的地址进行更改,因为p此时具有常属性。
*p=20;//这里是允许对*p进行更改的。

b.常量指针

const int* p = &a;
p = &b;//这里是允许对变量p指向的地址进行更改。
*p=20;//这里是不允许更改的,因为*p指向的内容具有常属性。

你可能感兴趣的:(C语言知识点,c语言,开发语言)