C语言结构体:学生信息统计实战
学生信息统计--结构体把一个学生的信息包括学号、姓名、性别、住址放在一个结构体变量中然后输出它各个成员的值。#include stdio.hstruct Student{long ID;char name[50];char sex[50];char addr[100];};int main(){struct Student stu1;printf(请输入学生信息\n);printf(请输入学号: \n);scanf(%ld, stu1.ID);printf(请输入姓名: \n);scanf(%s, stu1.name);printf(请输入性别 (男/女): \n);scanf(%s, stu1.sex);printf(请输入住址: \n);scanf(%s, stu1.addr);printf(\n--- 您录入的信息如下 ---\n);printf(学号: %ld\n, stu1.ID);printf(姓名: %s\n, stu1.name);printf(性别: %s\n, stu1.sex);printf(住址: %s\n, stu1.addr);return 0;}1. 代码逐行解析第一部分头文件与结构体定义struct Student { ... };: 这里定义了一个新的数据类型名为struct Student。概念: 在 C 语言中基本数据类型如int,float,char只能存储单一类型的数据。但现实世界中一个“学生”包含学号长整型、姓名字符串、性别字符串、住址字符串等多种信息。结构体就是为了解决这个问题而诞生的它允许我们将这些不同类型的数据“打包”在一起形成一个整体。成员变量: 大括号{}内的变量称为结构体的成员Members。long ID;: 存储学号。char name[50];: 存储姓名是一个字符数组。char sex[50];: 存储性别。char addr[100];: 存储住址。注意: 定义结束时别忘了分号;。此时并没有分配内存只是告诉编译器“有这么一种数据类型”。第二部分主函数与变量声明struct Student stu1;: 这里使用了刚才定义的类型来声明一个具体的变量stu1。内存分配: 当这行代码执行时系统会在栈Stack上为stu1分配一块连续的内存空间。这块空间的大小大致等于所有成员大小之和考虑到内存对齐实际大小可能会略大。类比: 如果struct Student是“学生档案表”的模板那么stu1就是根据这个模板填写的具体的一张表格。第三部分输入数据核心交互scanf的细节:stu1.ID:ID是long类型的基本变量scanf需要变量的地址所以必须加取地址符。第四部分输出数据同样使用.运算符获取成员的值并通过printf格式化输出。%ld对应long%s对应字符串字符数组。2. 结构体Struct核心知识拓展这段代码是一个非常经典的 C 语言入门示例主要展示了结构体struct的定义、变量声明、成员访问以及基本的输入输出操作。A. 为什么需要结构体在没有结构体之前如果要处理一个学生的信息你可能需要定义三个独立的数组这样做的缺点是数据是分散的。如果你要交换两个学生的信息你需要同时交换这三个数组中对应下标的数据非常容易出错且代码冗余。结构体将逻辑上相关的数据聚合在一起使得操作如赋值、传递、交换可以针对“整个对象”进行提高了代码的可读性和可维护性。B. 结构体的内存布局与对齐虽然我们在定义时写了longchar[50]char[50]char[100]但sizeof(struct Student)的结果往往不等于这些成员大小的简单相加。内存对齐Memory Alignment: 为了提高 CPU 读取数据的效率编译器会在成员之间插入填充字节Padding确保每个成员的起始地址是其自身大小的整数倍或者是编译器设定的对齐系数。优化技巧: 为了节省内存通常建议将占用空间大的成员放在前面占用空间小的放在后面以减少填充空隙。C. 结构体指针在处理大量数据如学生列表时直接传递结构体变量效率较低因为会发生内存拷贝。通常使用结构体指针。箭头运算符-是 C 语言中操作结构体指针的专用语法糖。D. 结构体数组如果要存储全班 50 个学生的信息可以定义结构体数组
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2443001.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!