1、用Typedef 定义类型
除了可以直接使用C提供的标准类型名(如int char float等)和自己声明的结构体等类型外,还可以用typedef声明新的类型名来代替已有的类型名。
习惯上常把typedef声明的类型名用大写字母表示,以便与系统提供的标准类型标识符相区别
1、typedef int INTEGER;
typedef float REAL;
如果一个程序中,一个整形变量用来计数,可以
typedef int COUNT;
COUNT i,j;
2、可以声明结构体类型
typedef struct
{
int month;
int day;
int year;
}DATE;
声明新类型名DATE,它代表上面指定的一个结构体类型。这时,就可以用DATE定义变量:
DATE brithday;
DATE * p;
3、还可以进一步:
1)、typedef int NUM[100];
NUM n;
声明NUM为整形数组类型,定义n为整形数组变量;
2)、typedef char * STRING;
STRING p,s[10];
声明STRING为字符指针类型
3)、typedef int (* POINTER)( )
声明POINTER为指向函数的指针类型,该函数返回整型值;
1】注意#define是在预编译时处理的,它只能作简单的字符串替换,而typedef 是在编译时处理的。实际上它并不是作简单的字符串替换。
2】当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用#include命令把它们包含进来。
3】使用typedef有利于程序的通用和移植。有时程序会依赖硬件特性,用typedef便于移植。例如,有的计算机系统int型数据用两个字节、数据范围为-32768~32767,而另外一些机器则以4个字节存放一个整数,数值范围为+-21亿。如果把一个C程序从一个以4个字节存放整数的计算机系统移植到以2个字节存放整数的系统,按一般方法需要将定义变量中的每个int改为long。例如,将“int a,b,c;”改为“long a,b,c;”,如果程序中有多处用int 定义变量,则要改动多处。现在用一个INTEGER 来声明int:
typedef int INTEGER;
在程序中所有整型变量都用INTEGER定义。在移植时只需改动typedef定义体即可:
typedef long INTEGER;
2、struct和typedef struct
普通结构体声明时使用只struct关键字,而链表需要typedef struct,比较疑惑他们之间的区别
(1) 在C中定义一个结构体类型要用typedef:
typedef struct Student
{
int a;
}Stu;
则声明变量是这种形式:Stu stu1;
如果没有typedef就必须用struct Student stu1;来声明。Stu实际上就是struct Student的别名。
另外这里也可以不写Student
typedef struct
{
int a;
}Stu;
则声明形式必须是Stu stu1;
2)在c++中定义一个结构体类型:
struct Student
{
int a;
};
于是就定义了结构体类型Student,声明变量时直接Student stu2
typedef struct Student2
{
int a;
}stu1;//stu1是一个结构体类型
struct Student
{
int a;
}stu2;//stu2是一个变量
注意带typedef关键字,其就为类型,不带就为变量
还应该注意的是,C++为了C程序员的习惯,保留了Struct关键字,但是其意义与Class相同,唯一的区别是Struct默认成员权限为public。
3) 链表的声明
//方式1
typedef struct ListNode
{
DataType data;
struct ListNode *next;
}Node,*LinkList;
//方式2
struct ListNode
{
DataType data;
struct ListNode *next;
};
typedef struct ListNode Node;
typedef Node *Linklist;
//方式3
typedef struct ListNode {
DataType data;
struct ListNode *next;
}Node;
typedef Node *LinkList;
因为都有typedef关键字,所以后面声明的都是类型。其中Node与LinkList本质是一样的,只不过一个是Node类型结构体,一个是指向Node的指针。但是理解时LinkList应该是高层次的意义,即一个链表。
本文详细介绍了C语言中使用typedef定义新类型的语法与应用场景,并对比了struct与typedefstruct的区别,帮助读者掌握如何更高效地管理和移植数据类型。
11万+

被折叠的 条评论
为什么被折叠?



