【重拾C语言】八、表单数据组织——结构体(类型、类型别名、直接/间接访问;典例:复数、成绩单)

news/2025/3/5 1:12:22/

目录

前言

八、结构体

8.1 结构体类型

8.2 结构体类型名

8.2.1 typedef关键字

8.2.1 结构体类型别名

8.3 结构体变量

8.3.1 使用结构体类型引用

8.3.2 使用结构体类型定义

8.3.3 使用typedef定义的结构体类型别名

8.4 访问结构体变量

8.4.1 直接成员选择表达式

8.4.2 间接成员选择表达式——指向结构体变量的指针

8.4.3 嵌套结构体

8.5 程序设计实例

8.5.1 复数

8.5.2 成绩


 

 

前言

        C语言中,结构体(Structure)是一种自定义的数据类型,用于组织和存储不同类型的数据项。结构体允许我们将多个相关的数据项组合在一起,形成一个更复杂的数据结构。

 

八、结构体

8.1 结构体类型

  • 结构体类型的定义
    • 结构体类型是分量的集合
    • 分量也称成员、成分、域
    • 分量类型可以不同
  • C语言中,结构体类型的定义是使用struct关键字
    • 结构体标签是用于标识结构体类型的名称。
    • 在定义结构体类型时,可以在结构体内部声明多个成员变量,每个成员变量都有自己的数据类型。
    • 名为Person的结构体类型,包含姓名、年龄和性别三个成员变量:
      • struct Person {char name[50];int age;char gender;
        };
  • 结构体类型的定义通常放在程序的开头或者单独的头文件中,以便在需要使用结构体的地方可以直接引用。

 

8.2 结构体类型名

8.2.1 typedef关键字

        typedef是C语言中的一个关键字,用于为已有的数据类型起一个新的名称(别名)。通过使用typedef,我们可以为现有的数据类型定义一个新的名称,以便在代码中更方便地使用。

  • typedef的语法形式是:
    • typedef 原类型名 别名;
  • 使用typedef来为int类型定义一个新的名称,比如叫做"myInt":
    • typedef int myInt;
  • 使用myInt来声明一个整数变量,就相当于声明一个int类型的变量:
    • myInt num = 42;

 

8.2.1 结构体类型别名

typedef struct Person {char name[50];int age;char gender;
} PersonType;

   typedef关键字用于为struct Person类型定义了一个别名PersonType。现在可以使用PersonType作为结构体类型struct Person的替代名称。

 

8.3 结构体变量

  • 类型定义不分配存储空间,只说明一个数据类型的框架结构
  • 类型标识符只定义了一个数据类型的框架,不占用存储空间,只给相应类型起一个名字
  • 只有变量才具有实体,才能保存数据
  • 声明结构体变量,可以采取如下三种形式之一

8.3.1 使用结构体类型引用

struct Person person1;  // 使用结构体类型引用声明结构体变量
person1.age = 25;
printf("Age: %d\n", person1.age);

        使用`struct`关键字加上结构体类型名称来声明结构体变量`person1`。然后,可以通过该变量访问结构体的成员。

 

8.3.2 使用结构体类型定义

struct Person {char name[50];int age;char gender;
};struct Person person2;  // 使用结构体类型定义声明结构体变量
person2.age = 30;
printf("Age: %d\n", person2.age);

        在声明结构体变量之前先定义了结构体类型`struct Person`,包括其成员。然后,我们可以使用该结构体类型来声明结构体变量`person2`。

 

8.3.3 使用typedef定义的结构体类型别名

typedef struct {char name[50];int age;char gender;
} PersonType;PersonType person3;  // 使用结构体类型别名声明结构体变量
person3.age = 35;
printf("Age: %d\n", person3.age);

        使用`typedef`关键字将匿名结构体类型定义为别名`PersonType`,然后使用`PersonType`来声明结构体变量`person3`。通过使用别名,我们可以直接访问结构体变量的成员。

8.4 访问结构体变量

8.4.1 直接成员选择表达式

        直接成员选择表达式使用点号(.)来访问结构体变量的成员。

 

8.4.2 间接成员选择表达式——指向结构体变量的指针

        通过指针可以方便地访问结构体的成员变量,可以使用箭头运算符 "->" 来访问指向结构体的指针所指向的成员变量。例如,如果有一个指向结构体的指针 ptr,并且结构体中有一个成员变量 member,我们可以使用 ptr->member 来访问该成员变量的值。

#include <stdio.h>// 定义一个结构体
struct MyStruct {int num;char letter;
};int main() {// 声明一个结构体变量并初始化struct MyStruct myVar = {10, 'A'};// 声明一个指向结构体的指针,并指向 myVarstruct MyStruct *ptr = &myVar;// 使用指针访问结构体成员变量printf("num: %d\n", ptr->num);         // 输出:num: 10printf("letter: %c\n", ptr->letter);   // 输出:letter: Areturn 0;
}

 

 

8.4.3 嵌套结构体

        对于嵌套结构体,你仍然可以使用成员选择表达式来访问内层结构体变量的成员。无论是直接成员选择表达式还是间接成员选择表达式,都可以根据需要继续应用于内层结构体变量。

        嵌套结构体:

struct InnerStruct {int innerNum;char innerLetter;
};struct OuterStruct {int outerNum;struct InnerStruct inner;
};

        OuterStruct 包含一个整数类型的成员变量 outerNum 和一个嵌套的 InnerStruct 结构体变量 inner,而 InnerStruct 结构体又包含一个整数类型的成员变量 innerNum 和一个字符类型的成员变量 innerLetter

        如果我们有一个嵌套结构体变量 myOuterVar,我们可以使用成员选择表达式来访问其中的成员变量。例如,要访问 outerNum,我们可以使用 myOuterVar.outerNum。要访问 innerNum,我们可以使用 myOuterVar.inner.innerNum。类似地,要访问 innerLetter,我们可以使用 myOuterVar.inner.innerLetter

#include <stdio.h>struct InnerStruct {int innerNum;char innerLetter;
};struct OuterStruct {int outerNum;struct InnerStruct inner;
};int main() {struct OuterStruct myOuterVar;// 设置外层结构体成员变量的值myOuterVar.outerNum = 10;// 设置内层结构体成员变量的值myOuterVar.inner.innerNum = 20;myOuterVar.inner.innerLetter = 'A';// 输出外层结构体成员变量的值printf("Outer Num: %d\n", myOuterVar.outerNum);// 输出内层结构体成员变量的值printf("Inner Num: %d\n", myOuterVar.inner.innerNum);printf("Inner Letter: %c\n", myOuterVar.inner.innerLetter);return 0;
}

        

49f8f4ad81b64ce68d8ff347d4aa1544.png

        无论嵌套结构体有多深,都可以根据结构体成员的层次结构使用成员选择表达式来访问任意层级的成员变量。

 

8.5 程序设计实例

8.5.1 复数

        复数(Complex number)是由实数部分和虚数部分组成的数。在程序设计中,我们可以使用结构体来表示复数,例如:

struct Complex {double realPart;double imaginaryPart;
};

        定义了一个名为 Complex 的结构体,它包含两个成员变量 realPart  和 imaginaryPart,分别表示复数的实部和虚部。使用这个结构体,我们可以创建复数的变量并对其进行操作:

#include <stdio.h>struct Complex {double realPart;double imaginaryPart;
};int main() {struct Complex myComplex;// 设置复数的实部和虚部myComplex.realPart = 3.0;myComplex.imaginaryPart = 4.0;// 访问并输出复数的实部和虚部printf("Real Part: %.2f\n", myComplex.realPart);printf("Imaginary Part: %.2f\n", myComplex.imaginaryPart);return 0;
}

a42376a6c7fa40749e61524bbd57033a.png

 

8.5.2 成绩

#include <stdio.h>struct Score {char name[50];char subject[50];int score;
};int main() {struct Score score1;printf("请输入姓名:");scanf("%s", score1.name);printf("请输入科目:");scanf("%s", score1.subject);printf("请输入成绩:");scanf("%d", &score1.score);printf("姓名:%s\n", score1.name);printf("科目:%s\n", score1.subject);printf("成绩:%d\n", score1.score);return 0;
}

2bd971cddaac44fdafb706475734b96a.png

 

 

 


http://www.ppmy.cn/news/1154529.html

相关文章

基于springboot实现音乐网站与分享平台项目【项目源码+论文说明】计算机毕业设计

摘要 本论文主要论述了如何使用JAVA语言开发一个音乐网站与分享平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述音乐网站与分享平台的当前背景以及系统开…

微信小程序备案内容常见问题汇总

一、备案时间点 自2023年09月01日起,新的微信小程序,必须备案后才能上架; 在2024年03月31日前,所有小程序都必须完成备案; 于2024年04月01日起,对未备案小程序进行清退处理。 微信小程序备案系统已于9月4日上线。 二、备案流程 [找备案入口]–[填主体信息]–[填小程…

淘宝店铺所有商品数据接口,淘宝整店所有商品数据接口,淘宝店铺商品接口,淘宝API接口

淘宝店铺所有商品数据接口可以通过淘宝开放平台获取。以下是具体步骤&#xff1a; 在开放平台注册成为开发者并创建一个应用&#xff0c;获取到所需的 App Key 和 App Secret 等信息。使用获取到的 App Key 和 App Secret 进行签名和认证&#xff0c;获取 Access Token。调用开…

业务安全五重价值:防攻击、保稳定、助增收、促合规、提升满意度

目录 防范各类威胁攻击 保障业务的连续性和稳定性 保障业务的合规性 提升企业营收和发展 提升企业满意度和品牌知名度 2023年暑假被“票贩子”和“黄牛”攻陷。他们利用各种手段抢先预约名额&#xff0c;然后加价出售给游客&#xff0c;导致了门票供不应求的局面&#xff…

visual studio设置主题和背景颜色

visual studio2019默认的主题有4种&#xff0c;分别是浅白色、深黑色、蓝色、蓝(额外对比度)&#xff0c;背景颜色默认是纯白色RGB(255,255,255)。字体纯白色看久了&#xff0c;眼睛会感到酸痛、疲劳&#xff0c;建议改成浅白RGB(250,250,250)、豆沙绿RGB(85,123,105)、透明蓝白…

数据结构之手撕顺序表(增删查改等)

0.引言 在本章之后&#xff0c;就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握&#xff0c;如果有小伙伴对上面相关的知识还不是很清晰&#xff0c;要先弄明白再过来接着学习哦&#xff01; 那进入正题&#xff0c;在讲解顺序表之前&#xff0c;我们先来介绍…

redis可视化工具安装打开提示msvcp140.dll丢失和vcruntime140.dll找不到的解决方法,附带文件

可能别的软件也会提示缺少这两个文件&#xff0c; vcruntime140.dl和vcruntime140.dll:DLL代表“动态链接库”&#xff0c;是一组可由多个应用程序共享的代码或数据资源。VCRuntime是Visual C Redistributable for Visual Studio 2015库的一部分&#xff0c;这是为了支持使用Mi…

互联网摸鱼日报(2023-10-15)

互联网摸鱼日报(2023-10-15) 36氪新闻 全国门店免费吃饭&#xff0c;老乡鸡凭什么&#xff1f;&#xff5c;氪金行业分析 许家印的五句话&#xff0c;恒大一句也没听 多方协同 护航民营经济发展壮大 直播场、内容场已成为淘系商家必争之地&#xff0c;短视频贡献成交占比提…