第一种方式:
定义一个结构,名称为term
struct term
{
float coef; //系数
int expn; //指数
};
下面定义它的两个别名:
typedef struct term term, ElemType;
以后,就可以用 term 或是 ElemType 来代替 struct term 了。
第二种方式:
还有一种更简洁的定义方式,就是定义结构的同时定义别名:
struct term
{
float coef; //系数
int expn; //指数
} term, ElemType;
注意到,这里,结构的名称是struct term,它的别名也是term,这是可以的。
第三种方式:
还可以再简化一下,这种定义方式称为匿名结构,就是没有给结构体本身起名字。
struct
{
float coef; //系数
int expn; //指数
} term, ElemType;
这里省略了结构的名字,直接写出别名。
范例程序如下:
#include <stdio.h>
#include <stdlib.h>
//使用第三种定义方式
typedef struct
{
float coef; /* 系数 */
int expn; /* 指数 */
}term,ElemType;
main()
{
term t1;
t1.coef=1.5;
t1.expn=2;
printf("结构型及其别名\n");
printf("coef=%f expn=%d\n",t1.coef, t1.expn);
}
第四种方式:
定义指向结构的指针的别名:
//定义数据项
typedef struct
{
float coef; /* 系数 */
int expn; /* 指数 */
}term,ElemType;
//定义链表结点的结构类型:
typedef struct LNode
{
ElemType data; //定义结点数据
struct LNode *next; //定义指向下一个结点的指针
}LNode, *Link;
这里,定义了一个链表的结点LNode,它包括一个数据项和一个指针项。
同时定义了这个结点的别名为LNode,代替struct LNode
还定义了指向这个结点的指针,别名为 Link 用来代替 struct LNode *
指向结点的指针的使用,示例程序:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
float coef;
int expn;
}term, ElemType;
typedef struct LNode
{
ElemType data; //结点数据
struct LNode *next; //指向结点的指针
}LNode, *Link;
main()
{
LNode n1; //定义一个链表结点
Link p1; //定义指向链表的指针
//对结点的数据域赋值
n1.data.coef = 1.5;
n1.data.expn = 2;
//对结点的指针域赋值
n1.next = NULL;
//使指针p指向这一结点
p1=&n1;
//打印结点数据
printf("系数项:%f 指数项:%d\n",(*p1).data.coef , (*p1).data.expn );
}