结构体和共同体(链表操作)

 

§10.1 概述

结构体(structure)是一种构造的数据类型,它把互相联系的数据组合成一个整体。例、

一个学生的学号、姓名、性别、年龄、成绩、地址,是互相联系的数据,在C语言中用“结构体(structure)”来定义。

struct student
 {
  int  num;    /* 学号 */
  char  name[20]; /* 姓名 */
  char  sex;    /* 性别 */
  int   age;    /* 年龄 */
  float score;   /* 成绩 */
  char  addr[30]; /* 地址 */
 };

结构体类型定义描述结构的组织形式,不分配内存.


struct  是关键字,不能省略。

student 是定义的结构体类型名。

结构体中的每一项数据,称为结构体“成员”(member)或“分量”。

“结构体”在大多数资料中被称为“结构”。

§10.2 结构体变量的定义

结构体是一种数据类型(像int、char、flaot是数据类型一样),可以用它定义变量。

用结构体类型定义变量的方式有三种:

一、先定义结构体类型,再定义变量

一般形式:struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….};
struct 结构体名 变量名表列;

例、struct student
 {
  int  num;    /* 学号 */
  char  name[20]; /* 姓名 */
  char  sex;    /* 性别 */
  int   age;    /* 年龄 */
  float score;   /* 成绩 */
  char  addr[30]; /* 地址 */
 };

struct student student1, student2;

结构体变量中的各成员,在内存中顺序存放。结构体变量所占内存大小用运算符sizeof计算。

例、printf(" %d %d \n",sizeof(struct student),sizeof(student1));

为了方便,可以这样定义结构体变量:

#define STUDENT struct student

STUDENT
 {
  int  num;    
  char  name[20]; 
  char  sex;   
  int   age;    
  float score;   
  char  addr[30]; 
 };

STUDENT student1, student2;

二、在定义类型的同时定义变量

一般形式:struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}变量名表列;

例:struct student
 {
  int  num;    /* 学号 */
  char  name[20]; /* 姓名 */
  char  sex;    /* 性别 */
  int   age;    /* 年龄 */
  float score;   /* 成绩 */
  char  addr[30]; /* 地址 */
 }student1, student2;


三、直接定义变量

一般形式:struct
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}变量名表列;(用无名结构体直接定义变量只能一次)

例:struct
 {
  int  num;    /* 学号 */
  char  name[20]; /* 姓名 */
  char  sex;    /* 性别 */
  int   age;    /* 年龄 */
  float score;   /* 成绩 */
  char  addr[30]; /* 地址 */
 }student1, student2;

四、成员是另一个结构体变量

struct date /* 日期结构 */
 {
   int month; /* 月 */
   int day;  /* 日 */
   int year;  /* 年 */
 };

struct student
 {
  int  num;    /* 学号 */
  char  name[20]; /* 姓名 */
  char  sex;    /* 性别 */
  int   age;    /* 年龄 */
  struct date birthday; /* 成员是另一个结构体变量 */
  char  addr[30]; /* 地址 */
 } student1, student2;

说明:

结构体类型与结构体变量概念不同

类型:不分配内存; 变量:分配内存

类型:不能赋值、存取、运算; 变量:可以

结构体可嵌套

结构体成员名与程序中变量名可相同,不会混淆

结构体类型及变量的作用域与生存期

   

§10.3 结构体类型变量的引用

1、一般情况下,不能将一个结构体变量作为整体来引用,只能引用其中的成员(分量)。引用结构体成员的

方式:结构体变量名.成员名

   .是“成员运算符”(分量运算符)

3、仅在以下两种情况下,可以把结构体变量作为一个整体来访问。

(1)结构体变量整体赋值,例、

    student2 = student1;

(2)取结构体变量地址,例、

    printf("%x", &student1); /*输出student1的地址 */

 

§10.4 结构体变量的初始化

形式1:

 

形式2:

 

形式3:

注意:不能在结构体内赋初值。例、

struct student
 {
  long int num = 89031;
  char  name[20] = "Li Lin";
  char  sex = 'M'; 
  char  addr[30] = "123 Bejing Road";
 }a;

教材中,外部存储类型、静态存储类型的讨论,没有意义!

 

§10.5 结构体数组

一、结构体数组的定义:有三种形式。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值