关于C语言结构体的概叙
结构体的定义
结构体是c编程中一种用户可自定义的数据类型,它允许你存储不同的数据类型的数据项。
为了定义结构,必须使用struct语句。struct语句定义了一个包含多个成员的新的数据类型。
struct tag{
Elemtype name1;
Elemtype name2;
}variable-name;
其中tag为结构体标签,Elemtype代表数据类型,比如说int,float,char等,name是变量名,variable-name代表这个结构体的变量名称。
定义结构体
定义结构体有很多方式。第一种
struct Book
{
char name[20];
int prices;
}book;
在这里面我们定义了一个结构体struct Book,book为一个结构体变量。类比于int prices,struct Book就相当于int ,而book相当于一个prices。但是这种方式定义结构体变量不够方便。
第二种方式。
struct Book
{
char name[20];
int prices;
};
struct Book book1;
struct Book book2;
在这里我们使用结构体struct Book定义了两个结构体变量book1,book2.但是这样使用struct Book还是没有使用int char那么方便,感觉加上一个struct很别扭。
typedef
typedef为C语言的关键字,它可以为数据类型取一个新的名字。比如说 inti,j;
,我们可以使用 typedefintx;
,这里我们将int重新命名为x。 x i,j;
的效果与前面的 inti,j;
相同。
为了方便使用结构体,我们可以使用 typedefstructBookBook;
这样,我们再定义一个新的strcut Book结构体类型的变量时,可以直接用 Bookbook1,book2;
,这样就看着方便了很多。
数据结构书中的例子
typedef struct Lnode
{
Elemtype data;
struct Lnode *next; //c语言支持结构体声明中包含指向自己类型的指针
}Lnode, *LinkList;
在书中的这个例子中,Lnode为这个结构体的一个变量,而LinkList为指向这个结构体的指针类型。相当于 struct Lnode Lnode 和struct Lnode* LinkList。其中 Lnode*p
中的p和 LinkListL
中的L是一样,都是指向结构体Lnode的指针变量,这里是为了让LinkList L特意指向头节点,与其他普通的节点分开,才特意多设置一个LinkList指针类型。
访问结构体中的元素
简单来说我们可以使用.来访问结构体中的成员,比如说 book1.prices
就可以访问prices的值。如果说是 Book*book;book=&book1
,这里book是一个指向book1的指针变量。指向结构的指针访问结构体成员的方法不同,就要使用->符号。这时访问prices的方法为 book->prices
。