单纯对typedef的小,如下
C语言中一些关于typedef的归纳
typedef 的一般使用
typedef允许你为各种数据类型定义新名字。
typedef 如何声明
typedef声明的写法和普通的声明基本相同,只是把typedef这个关键字出现在声明的前面。
例如
cptr_to_char a;
char b = 'm';
a = &b;
printf("%cn",a);//输出m
这个声明把ptr_to_char作为指向字符的指针类型的新名字,声明a是一个指向字符的指针。
这样声明的好处使用typedef声明类型可以减少使声明变得冗长的危险。
Attention
你应该使用typedef而不是#define来创建新的类型名,因为后者无法正确地处理指针类型。
例如
d _ptr_to_char a,b;
char c = 'l';
a = &c;
b = 'h';
printf("%cn",a);//输出l
printf("%cn",b);//输出h
正确地声明了a,b却被声明为一个字符。在定义更为复杂的类型名时,如果函数指针或指向数组的指针,使用typedef更为合适。
typedef 在结构体中的使用
我们来看一个typedef与struct结合使用的例子
typedef struct TagNode
{
int age;
char name[20];
char address;
struct TagNode next;
}Node,pNode;
上面的代码实际完成了两个操作
1.定义了一个新的结构体类型
struct TagNode
{
int age;
char name[20];
char address;
struct TagNode next;
}
其中TagNode称为"Tag",即标签,实际上是一个临时名字,struct关键字和TagNode一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。我们可以用struct TagNode来定义变量,但要注意,使用TagNode来定义变量是不对的,因为struct和TagNode合在一起才能表示一个结构类型。
2.typedef为这个结构起了新的名字,叫Node和pNode。,我们可以直接使用Node来定义该结构体类型变量,使用pNode来定义指向该结构体类型的指针变量。
例如
typedef struct TagNode
{
int age;
char name[20];
char address;
struct TagNode next;
}Node,pNode;
int main()
{
Node lhk = {19,"Robert"};
pNode p;
lhk.address = (char)malloc(80);//表示查找可用连续80个字节内存的空间赋给address存储地址。 p = &lhk;//后续引用结构体成员时,以(p).age形式引用。
...
}
吐槽一点,回答区不能直接粘贴markdown格式文本,很难受。
归纳于2017.9.9.23.08