第九章 用户自己建立数据类型

9.1 定义和使用结构体变量

自己建立结构体类型

C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体。

struct Student
{int num;//学号为整型
char name[20];//姓名为字符串
char sex;//性别为字符型
int age;//年龄为整型
float score;//成绩为实型
char addr[30];//地址为字符串
};//注意最后有一个分号

声明一个结构体类型的一般形式为
struct 结构体名
{成员表列};

  • struct是声明结构体类型时必须使用的关键字,不能省略。student是结构体名,是由用户指定的,又称"结构体标记",以区别于其他结构体类型。

说明:
(1)结构体类型并非只有一种,可以根据需要建立名为struct Teacher,struct Worker和struct Date等结构体类型。
(2)成员可以属于另一个结构体类型。

struct Date
{};
struct Student
{…
struct Date birthday;
//成员birthday属于struct Date 类型
};

定义结构体类型变量

  1. 先声明结构体类型,再定义该类型的变量
    例如:struct Student student1,student2; 在定义了结构体变量后,系统会为之分配内存单元。这种方式是声明类型和定义变量分离,在声明类型后可以随时定义变量,比较灵活。
  2. 在声明类型的同时定义变量
    struct 结构体名
    {成员表列
    }变量名表列;

    写小程序时比较方便,一般不多用此方式。
  3. 不指定类型名而直接定义结构体类型变量
    struct
    {成员表列
    }变量名表列;

    指定了一个无名(结构体名)的结构体类型。显然不能再以此结构体类型去定义其他变量。这种方法用得不多。

说明:
(1)结构体类型与P296

结构体变量的初始化和引用

把一个学生的信息(包括学号,姓名,性别,住址)放在一个结构体变量中,然后输出这个学生的信息。

#include <stdio.h>
int main()
{struct Student
  {long int num;
  char name[20];
  char sex;
  char addr[20];
  }a={10101,"Li Lin",'M',"123 Beijing Road"};       
  printf("No.:%ld\nname:%s\nsex:%c\naddress:%s\n",a.num,a.name,a.sex,a.addr);
  return 0;
}

程序分析:
(1)在定义结构体变量时可以对它的成员初始化。初始化列表是用花括号括起来的一些常量,这些常量依次赋给结构体变量中的各成员。注意:是对结构体变量初始化,而不是对结构体类型初始化。
C99标准允许对某一成员初始化,如:struct Student b={.name="Zhang Fang"};//在成员名前有成员运算符"."P297

9.2 使用结构体数组P300

9.3 结构体指针

9.5 共同体类型

什么是共用体类型

union 共同体名
{成员表列
}变量表列;

例如:

union Data
{int i;//表示不同类型的变量可以存放到同一段存储单元中 
char ch; 
float f;
}a,b,c;//在定声明类型的同时定义变量

也可以将类型声明与变量定义分开

union Data//声明共用体类型
{int i;
char ch;
float f;
};
union Data a,b,c;//用共用体类型定义变量

也可以不定义共用体类型名。
结构体变量所占内存长度是各成员占的内存长度之和。 每个成员分别占有其自己的内存单元。而共用体变量所占的内存长度等于最长的成员的长度。

引用共用体变量的方式

只有先定义了共用体变量才能引用它,但应注意,不能引用共用体变量,而只能引用共用体变量中的成员。例如:a.i(引用共用体变量中的整型变量i)是正确的。不能只引用共用体变量,例如:printf("%d",a);是错误的,应写成printf("%d",a.i);

共用体类型数据的特点
p139

9.7 用typedef声明新类型名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值