C语言 您所在的位置:网站首页 c语言引用型变量 C语言

C语言

2024-06-28 19:17| 来源: 网络整理| 查看: 265

思考: 如果现在希望保存一个学生的所有信息,该如何保存? 姓名、年龄、身高、体重、成绩… char stu[100] = “xiaoming|22|175|65|59”:

在现实生活中,有很多的一组的数据,比如学生(姓名、年龄、身高、体重、成绩.),员工(姓名、年龄、性别、已婚、未婚、工龄),里面的属性不一定都是相同的类型。使用构造数据类型——结构体类型。

一、什么是结构类型 结构类型是一种非常有用的类型,是今后学习“类”类型的基础,可用来描述现实生活中具有多种属性的实体。如学生有“学号”、“姓名”、“性别”以及各门课的“成绩”等属性。结构体可以用来保存相同的类型,也可以保存不同的类型。

二、结构类型的定义 结构体内部的元素,也就是组成成分,我们一般称为"成员"。 定义一个结构体的一般形式为:

struct 结构类型名 { 数据类型 成员1; 数据类型 成员2; 数据类型 成员3; …… 数据类型 成员n; };

struct是关键字,是结构体类型的标志。 2.举例 定义一个叫做Student的结构体,共有name、num、age、sex4个成员。

//定义了一个保存学生信息的结构体类型 struct stuInfo { char name[20]; //名字 int num; //学号 int age; //年龄 char sex; //性别 }; int main(void) { //通过struct stuInfo 定义结构体变量 struct stuInfo stu1, stu2; return 0; } 【说明】 1) struct 关键字,表示现在定义的是一个结构体类型,定义结构类型 其实是在创造类型。 2) 结构类型名,创建的结构类型的名字,是一个标示符 3) {}里面可以创建多个数据项,这个数据的类型,可以是简单的数据 类型,也可以是构造数据类型,比如:数组,结构体; 【注】: 1)创建类型,这个类型,包括多个不同类型的变量,复杂的数据 类型,这个创建的类型,本身是不会占用内存空间,创建结构体类型 ——————只是相当于画了一张图纸。 2)在定义结构体类型的时候,数据项不能够被赋值。

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

三、结构类型变量的定义

间接定义法——先定义结构体类型,再定义变量 struct stuInfo { char name[20]; //名字 int num; //学号 int age; //年龄 char sex; //性别 };

通过结构类型 struct stuIfo , 创建结构体变量 struct stuInfo 变量名; struct stuInfo stu1, stu2, stu3, ….

2.直接定义法——在定义结构类型的同时说明结构变量。 这种形式的说明的一般形式为:

struct stuInfo { char name[20]; int num; int age; char sex; }stu1, stu2, stu3,…;

3.直接定义法——直接定义结构体类型变量,省略类型名 struct { char name[20]; int num; int age; char sex; }stu1, stu2, …; 这个创建结构体变量的方式,没有定义结构体类型; 所以不能够在代码后面,重新去定义新的结构体变量。

四、结构体变量和初始化 和其他类型变量一样,对结构变量可以在定义时进行初始化赋值。

struct stuInfo { char name[20]; int num; int age; char sex; }; struct stuInfo stu1 = {“zhangsan”, 1, 20, ‘m’}; struct stuInfo stu2 = {“lisi”, 2, 22, ‘f’};

只能在定义变量的同时进行初始化赋值,初始化赋值和变量的定义不能分开,下面的做法是错误的:

struct stuInfo stu; stu = {“lisi”, 2, 22, ‘f’}; 【注】: 1.不允许对结构体本身递归定义 2.结构体内可以包含别的结构体 3.定义结构体类型,只是说明了该类型的组成情况,并没有给它分配存储空间,就 像系统不为int类型本身分配空间一样。只有当定义属于结构体类型的变量时,系统才会分配存储空间给该变量 4.结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排列

五、结构体成员的表示方式 在程序中使用结构变量时,往往不把它作为一个整体来使用。一般对结构 变量的使用,包括赋值、输入、输出、运算等都是通过结构变量的成员来实现的。 表示结构变量成员的一般形式是: ‘.’ 结构体成员变量运算符 结构体变量.成员(stu1.name)

六、结构变量的赋值 结构变量的赋值就是给各成员赋值。可用输入语句或赋值语句来完成。 输入语句: scanf(“%s”, stu1.name); scanf(“%d”, &stu1.age); scanf(“%d”, &stu2.age); 赋值语句: stu1.age = 20; stu2.num = 2;

七、结构体数组 数组的元素也可以是结构类型的。因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下标结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。如一个班的学生档案,一个车间职工的工资表等。 结构体数组的定义方式 结构类型说明符 数组名[常量表达式]; 结构类型说明符: 表示现在定义的是一个结构体数组; 数组名: 结构体数组的名字,是一个标识符 常量表达式: 数组的元素个数。

//赋值3本书的名称等信息,然后按照每行一本书的信息输出。 struct bookInfo { char name[20]; char author[20]; float price; char publish[20]; }; int main(void) { struct bookInfo book[3] = {}; for (int i = 0; i printf("第%d本书的信息如下:\n", i + 1); printf("name: %s, author: %s, price: %.2f, publish: %s\n", book[i].name, book[i].author, book[i].price, book[i].publish); } return 0; }

八、指针和结构体的关系 1、结构体指针 结构体变量,在内存中的地址———结构体指针。 2、结构体指针变量 一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的。 结构指针变量说明的一般形式为: 结构体类型说明符 *变量名; 例如: struct stuInfo *p; //声明了一个指针变量p, p用来保存struct stuInfo 类型结构体变量的指针。 可以对指针变量进行初始化: struct stuInfo *p = NULL; //空指针 struct stuInfo stu; struct stuInfo *pstu = &stu; 通过结构体指针访问成员变量的一般形式为:

pstu->name, 访问stu的name,类型:字符数组 pstu->num 访问stu的num, 类型: int pstu->age, 访问stu的age, 类型:int pstu->sex, 访问stu的sex, 类型:char (*pstu).name (*pstu).num (*pstu).age (*pstu).sex


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有