结构体与共用体——C语言——day15

在C语言中,C语言允许用户自己指定这样一种数据结构,它称为结构体(structure) 。它相当于其他高级语言中的“记录”。

在这里插入图片描述

假设程序中要用到图所表示的数据结构,但是C语言没有提供这种现成的数据类型,因此用户必须要在程序中建立所需的结构体类型。

eg:
struct student 
{
	int num; 
	char name[20]; 
	char sex; 
	int age; 
	float score; 
	char addr[30]; 
};

声明一个结构体类型的一般形式为:

struct 结构体名
{
	成员列表
};

“结构体名”用作结构体类型的标志,它又称“结构体标记" (structure tag) 。上面的结构体声明中student就是结构体名(结构体标记)。花括号内是该结构体中的各个成员,由它们组成一个结构体。例如,例中的num、name、sex 等都是成员。对各成员都应进行类型声明,即

类型名 成员名;

也可以把“成员列表 “(member list) 称为“域表” (field list) 。每一个成员也称为结构体中的一个域。成员名命名规则与变量名相同。

定义结构体类型变量的方法

  1. 先声明结构体类型再定义变量名
    如上面已定义了一个结构体类型 struct student, 可以用它来定义变量。例如:
    在这里插入图片描述
    定义了 student1和student2为struct student类型的变量,即它们具有struct
    student 类型的结构:
    在这里插入图片描述
  2. 在声明类型的同时定义变量
eg:
struct student 
{
int num; 
char name[20]; 
char sex; 
int age; 
float score; 
char addr[30]; 
}studentl, student2;

它的作用与第一种方法相同,即定义了两个 struct student 类型的变量 student1、student2 。这种形式的定义的一般形式为:

struct 结构体名
{ 
成员表列
}变量名表列;
  1. 直接定义结构体类型变量
其一般形式为:
struct
{ 
成员表列
}变量名表列;
即不出现结构体名。

结构体变量的引用

(1) 不能将一个结构体变量作为一个整体进行输人和输出。例如,已定义 student1和student2 为结构体变量并且它们已有值。

print£(11%d, %s, %c , %d, %£. %s\n" ,studentl) //不能这么引用
正确的方法应该是:结构体变量名.成员名

(2) 如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。
(3) 对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。

eg:
student2.score= studentl. score; 
sum = studentl.score+ student2.score; 
studentl.age++ ; 
++studentl.age;

(4) 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。

scanf("%d", &studentl.num);  //输入studentl. num 的值
printf("%o", &studentl);  //输出 studentl 的首地址

结构体数组

定义结构体数组

struct student 
{ int num; 
char name[20]; 
char sex; 
int age; 
float score; 
char addr[30]; 
}; 
struct student stu[3];

以上定义了一个数组stu, 数组有3个元素,均为 struct student 类型数据。
在这里插入图片描述
数组各元素在内存中连续存放。

结构体数组的初始化

struct student 
{int num; 
char name[20]; 
char sex; 
int age; 
float score; 
char add[30];
}stu[ 3] ={{10101,"Li Lin",'M',18,87.5,"103 Beijing Road"} , {10102 ,"Zhang Fun", 'M', 19, 99 ,
"130 Shanghai Road" }, { 10104 ,"Wang Min", 'F' , 
20, 78.5 ,"1010 Zhongshan Road"} } ;

在这里插入图片描述

以上就是今天的内容!

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值