C语言第五章之复合类型(struct)

news/2025/2/11 22:49:12/

复合类型

概述

        有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性, 这时候可通过结构体实现

1. 结构体 struct

结构体(struct)可以理解为用户自定义的特殊的复合的“数据类型

变量的定义和初始化

  • 定义结构体变量的方式:
    • 先声明结构体类型再定义变量名
    • 在声明类型的同时定义变量

结构体大小

 结构体大小,由内部数据决定的
 如果是空的结构, 是由内部数据类型决定的

#include <stdio.h>
#include <string.h>// 结构体 struct
// 不同类型组合成一个有机的整体,组装成新的数组类型// 初始化
struct stu
{int id;char name[20];int age;float score;
} student;// 赋值
// 单个赋值
struct stu student = {1, "张三", 18, 100.0};// 多个赋值[]
// struct stu student[] = {
//     {1, "张三", 18, 100.0},
//     {2, "王二麻", 20, 99.0}};// struct tea
// {
//     char name[20];
//     int age;
// } teacher = {"李四", 20};int main()
{printf("id = %d", student.id);printf("name = %s", student.name);printf("age = %d", student.age);printf("score = %f", student.score);// 修改整型student.id = 2;printf("id = %d", student.id);// 修改字符strcpy(student.name, "李四");printf("name = %s", student.name);// 结构体大小,由内部数据决定的// 如果是空的结构, 是由内部数据类型决定的printf("sizeof(student) = %d", sizeof(student));return 0;
}

结构体作为参数

  • 传值是指将参数的值拷贝一份传递给函数,函数内部对该参数的修改不会影响到原来的变量

  • 传址是指将参数的地址传递给函数,函数内部可以通过该地址来访问原变量,并对其进行修改。

#include <stdio.h>
#include <string.h>struct stu
{char name[20];int age;
};void show_stucct(struct stu student)
{printf("姓名:%s\n", student.name);printf("年龄:%d\n", student.age);strcpy(student.name, "王二麻子");printf("修改后年龄:%s\n", student.name);
};// 函数参数传递结构体指针
// 指针类型需要使用->操作符void show_stucct_pointer(struct stu *student)
{strcpy(student->name, "王二麻子666");printf("姓名:%s\n", student->name);printf("年龄:%d\n", student->age);
};int main()
{struct stu s = {"张三", 18};show_stucct(s);show_stucct_pointer(&s);printf("-----------------------\n");// 指针函数传递时,会在外面修改printf("姓名:%s\n", s.name);printf("年龄:%d\n", s.age);return 0;
}

2. 共用体 union

共用体union是一个能够在同一个存储空间存储不同类型的数据的类型

-------------------------------以下内容,明天更新,敬请期待----------------------------------


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

相关文章

mybatis分页实现总结

1.mybatis拦截器相关知识 1.作用 mybatis的拦截器是mybatis提供的一个拓展机制&#xff0c;允许用户在使用时根据各自的需求对sql执行的各个阶段进行干预。比较常见的如对执行的sql进行监控&#xff0c;排查sql的执行时间&#xff0c;对sql进行拦截拼接需要的场景&#xff0c…

MySQL命令分类与大纲

一、数据库管理 创建与删除数据库 CREATE DATABASE&#xff1a;创建新数据库DROP DATABASE&#xff1a;删除已存在的数据库ALTER DATABASE&#xff1a;修改数据库属性 切换与查看数据库 USE&#xff1a;选择当前工作数据库SHOW DATABASES&#xff1a;列出所有可用数据库 二、…

Android的.dex、.odex与.oat文件区别

Android的.dex、.odex与.oat文件区别 .dex与.odex、.oat有什么联系呢&#xff1f; 1、dex文件 在我们写Java代码的时候&#xff0c;生成的文件是.java文件。 对于PC上的java虚拟机&#xff08;JVM&#xff09;运行的是.class。 .java文件转成.class文件&#xff0c;需要jdk…

使用Python模仿文件行为

在Python中&#xff0c;你可以通过文件操作函数&#xff08;如open()函数&#xff09;以及模拟输入输出流的库&#xff08;如io模块&#xff09;来模拟文件行为。下面是一些示例&#xff0c;展示了如何使用这些工具在Python中模拟文件行为。 1、问题背景 在编写一个脚本时&…

代理模式介绍

代理模式&#xff08;Proxy Pattern&#xff09;是一种常用的设计模式&#xff0c;它属于结构型设计模式&#xff0c;用于为其他对象提供一个代理以控制对该对象的访问。在代理模式中&#xff0c;一个代理类代表一个真实主题&#xff08;也称为目标对象或被代理对象&#xff09…

电商技术揭秘九:搜索引擎中的SEO数据分析与效果评估

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台的个性…

贪吃蛇web小游戏

蛇的移动&#xff1a;通过定时器实现蛇的自动移动&#xff0c;并通过监听用户的键盘输入来改变蛇的移动方向。 食物的生成&#xff1a;随机在地图上生成食物&#xff0c;并在蛇吃到食物时更新得分和食物的位置。 墙和边界的碰撞判断&#xff1a; 监测蛇是否撞墙&#xff08;遍…

Day 28 93.复原IP地址 78.子集 90.子集II

复原IP地址 给定一个只包含数字的字符串&#xff0c;复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.…