Menu Close

结构体 ( Structures ) – C语言

在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。 显然不能用一个数组来存放这一组数据。

因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)”或叫“结构体”。 它相当于其它高级语言中的记录。“结构”是一种构造类型,它是由若干“成员”组成的。

每一个成员可以是一个基本数据类型或者又是一个构造类型。结构既是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义函数一样。

数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。

结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:

Title
Author
Subject
Book ID

定义结构体

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

struct structure_tag {

  member definition;
  member definition;
  ...
  member definition;
} one-or-more-structure-variables;

structure_tag 是结构体标签,是可选的。

每个成员定义(member definition)都是一个普通变量定义,例如int i; 或浮动f; 或任何其他有效的变量定义。

在结构定义的最后,最后一个分号之前,您可以指定一个或多个结构变量,但这是可选的。

例如声明Book结构的方式:

struct Books //书
{
  char title[50];
  char author[50];
  char subject[100];
  int book_id;
} book;

struct stu //学生
{
  int num;
  char name[20];
  char sex;
  float score;
};

 

在这个结构定义中,结构名为 stu,该结构由 4 个成员组成。第一个成员为 num,整型变量;第二个成员为 name,字符数组;第三个成员为 sex,字符变量;第四个成员为 score,实型变量。应注意在括号后的分号是不可少的。结构定义之后,即可进行变量说明。

凡说明为结构 stu 的变量都由上述 4 个成员组成。由此可见, 结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。

访问结构体成员

要访问结构的任何成员,我们使用成员访问运算符(.)成员访问运算符就是结构变量名和结构成员的英文句点。 以下示例显示如何在程序中使用结构及访问结构成员-

例1. 访问结构成员

#include <stdio.h>
#include <string.h>

struct Books {
   char title[50];
   char author[50];
   char subject[100];
   int book_id;
};
int main( ) {

   struct Books Book1; /* Declare Book1 of type Book */
   struct Books Book2; /* Declare Book2 of type Book */

     /* book 1 specification */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali");
   strcpy( Book1.subject, "C Programming Tutorial");
   Book1.book_id = 6495407;


    /* book 2 specification */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");
   Book2.book_id = 6495700;

    /* print Book1 info */
   printf( "Book 1 title : %s\n", Book1.title);
   printf( "Book 1 author : %s\n", Book1.author);
   printf( "Book 1 subject : %s\n", Book1.subject);
   printf( "Book 1 book_id : %d\n", Book1.book_id);

    /* print Book2 info */
   printf( "Book 2 title : %s\n", Book2.title);
   printf( "Book 2 author : %s\n", Book2.author);
   printf( "Book 2 subject : %s\n", Book2.subject);
   printf( "Book 2 book_id : %d\n", Book2.book_id);

   return 0;
}

结构体的函数调用

函数可以把结构作为参数调用。就和调用其他变量和指针一样。

例2.结构体作为参数


#include <stdio.h>
#include <string.h>
  
struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
/* function declaration */
void printBook( struct Books book );
 
int main( ) {
 
   struct Books Book1;        /* Declare Book1 of type Book */
   struct Books Book2;        /* Declare Book2 of type Book */
      /* book 1 specification */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali"); 
   strcpy( Book1.subject, "C Programming Tutorial");
   Book1.book_id = 6495407; 
     /* book 2 specification */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");
   Book2.book_id = 6495700;

     /* print Book1 info */
   printBook( Book1 ); 
      /* Print Book2 info */
   printBook( Book2 );
 
   return 0;
}
 
void printBook( struct Books book ) {
 
   printf( "Book title : %s\n", book.title);
   printf( "Book author : %s\n", book.author);
   printf( "Book subject : %s\n", book.subject);
   printf( "Book book_id : %d\n", book.book_id);
}

 

 

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in C语言教程

Related Posts