vlambda博客
学习文章列表

关于C语言结构体的概叙

结构体的定义

结构体是c编程中一种用户可自定义的数据类型,它允许你存储不同的数据类型的数据项。

为了定义结构,必须使用struct语句。struct语句定义了一个包含多个成员的新的数据类型。

 
   
   
 
  1. struct tag{

  2. Elemtype name1;

  3. Elemtype name2;

  4. }variable-name;

其中tag为结构体标签,Elemtype代表数据类型,比如说int,float,char等,name是变量名,variable-name代表这个结构体的变量名称。

定义结构体

定义结构体有很多方式。第一种

 
   
   
 
  1. struct Book

  2. {

  3. char name[20];

  4. int prices;

  5. }book;

在这里面我们定义了一个结构体struct Book,book为一个结构体变量。类比于int prices,struct Book就相当于int ,而book相当于一个prices。但是这种方式定义结构体变量不够方便。

第二种方式。

 
   
   
 
  1. struct Book

  2. {

  3. char name[20];

  4. int prices;

  5. };


  6. struct Book book1;

  7. 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;,这样就看着方便了很多。

数据结构书中的例子

 
   
   
 
  1. typedef struct Lnode

  2. {

  3. Elemtype data;

  4. struct Lnode *next; //c语言支持结构体声明中包含指向自己类型的指针

  5. }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