typedef

typedef

typedef ,type表示类型, def就是define, 定义的意思。所以,根据名字我们就可以知道typedef就是类型定义的意思。可以对一个类型进行重新定义。

一般对一个类型重新定义都是这种形式: typedef 类型  重定义

如:

typedef_第1张图片

这种对类型重定义的方法的好处就是万一以后想要改数据类型, 可以直接在typedef处直接将int改为想要的数据类型,比如我想要将int类型,改为char类型 ,只需要将typedef处改掉就好:

typedef_第2张图片 

这样当想要修改一些数据类型时既不容易遗漏, 也不容易出错。增加了程序的可维护性。

这里有一些对数据类型进行重新定义的例子。

 

 上面三种类型是比较常见l的typedef例子。我们可以看到第三组区别于第一二组。

所以这里需要注意的是, 数组指针和函数指针的重新定义不是一般的:typedef 类型 重定义

而是应该将类型的重新定义写在里面

 比如对数组指针进行重新定义, 首先一个数组指针的类型, 什么是他的类型标志。

假如定义一个数组指针int (*p) [5] 我们要知道, int(*)[   ]  就是这个数组指针的类型。 所以对这个类型进行重新就是:

typedef  int (*  重定义)[5]

重定义部分是我们重定义后的名字, 假如我要重定义为P_int_5, 那么就可以写成:

typedef  int (* P_int_5)[5] 

这样就是一个完整的定义过程。P_int_ 5就是我们要的类型名。

函数指针也是一样的道理,假如想要对int(*) (int, int)进行重新定义,并且重定义后的类型名叫:P_int_int_int,  就要将重定义写在括号里面, 即:

typedef (*  P_int_int_int)(int, int)

其实这里还有一点需要强调, define 和typedef是不一样的。 define是一个宏。使用宏定义数据类型, 并不是创建了一个类型名, 而是一种“代换”, 比如我这里有一串代码:

typedef_第3张图片

我们可以看到, 这里的pd并不是int * 类型, 而是一个int类型, 那么为什么会是这样呢, 因为宏会在预处理阶段将定义重现转化为原来的东西。什么意思?就是这样:

typedef_第4张图片

在预处理阶段,P_INT被转换成立int*, 但是我们直到, 这个int* 是不能作用于pd的, 想要令pd也是指针必须在pd前面加*。

而P_int就不会发生这种情况, 因为typedef重定义int* 后, 已经将P_int类型作为新的一种类型, 这个类型的类型名是P_int,类型和int* 一样。  

你可能感兴趣的:(C语言专栏,c语言)