typedef 的一般使用
- typedef允许你为各种数据类型定义新名字。
typedef 如何声明
- typedef声明的写法和普通的声明基本相同,只是把typedef这个关键字出现在声明的前面。
- 例如:
typedef char *ptr_to_char;
ptr_to_char a;
char b = 'm';
a = &b;
printf("%c\n",*a);//输出m
这个声明把ptr_to_char作为指向字符的指针类型的新名字,声明a是一个指向字符的指针。
- 这样声明的好处:使用typedef声明类型可以减少使声明变得冗长的危险。
Attention
- 你应该使用typedef而不是#define来创建新的类型名,因为后者无法正确地处理指针类型。
- 例如:
#define d_ptr_to-char char *
d_ptr_to_char a,b;
char c = 'l';
a = &c;
b = 'h';
printf("%c\n",*a);//输出l
printf("%c\n",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形式引用。
...
}
- 归纳于2017.9.9.23.08晚
网友评论