C语言 - 构造类型

news2024/9/27 21:19:06

构造类型:

数据类型的分类:

  1. 基本类型:·整数型:短整型(short)、整型(int)、长整型(long)、长长整型(long long)

·浮点型:单精度浮点型(float)、双精度浮点型(double)

·字符型:char

(2)指针类型:·数据类型*:int*、char*、float*...·void*:任意数据类型的指针

(3)空类型:void:没有返回值或没有形参(不能定义变量)

(4)自定义类型/构造类型:·结构体类型:struct

                         ·共用体类型(联合体):union

                         ·枚举类型:enum

注意:整数型和字符型分为有符号(signed)和无符号(unsigned),默认是有符号,有符号   可以省略关键字signed

结构体:

·定义:自定义数据类型的一种,关键字struct,结构体类型的变量可以存储多个不同数据类型的数据

·定义格式:

注意:结构体中定义的变量称为成员变量

·格式说明:·结构体名:合法的标识符,建议单词首字母大写

   ·数据类型:C语言支持的所以类型

   ·成员名称:合法的标识符,就是变量的命名标准

   ·数据类型n 成员名称n:类似于定义变量,定义了结构体中的成员

·注意:

·结构体在定义的时候,成员不能赋值

·举例:

·常见的定义格式:(1)方式一:常规定义(只定义类型)---推荐          

(2)方式二:定义匿名结构体(常用于作为其他结构体的成员使 用)

注意:定义匿名结构体的的同时必须定义结构体变量,否则编译报 错,结构体可以作为另一个结构体的成员。

总结:(1)结构体可以定义在局部位置,也可以定义在全局位置

          (2)全局位置的结构体名和局部位置的结构体名可以相同, 就近原则(和普通变量的定义同理)

·结构体类型的使用:利用结构体类型定义变量,定义数组,结构体类型的使用与基本 数据类型的使用类似

结构体变量的定义:

·三种形式定义结构体变量:

(1) ①先定义结构体

          ②然后使用struct结构体名  变量名;               

(2) 在定义结构体的同时,定义结构体变量;

此时定义了一个结构体A,x,y是这个结体类型的变量

(3)不推荐

在自定义匿名结构的同时,定义结构体变量:

此时定义了一个没有名字的结构体(称为匿名结构体),xy是这个匿名结构体的变量

说明:匿名结构体----弊大于利(尽量少用)

  优点:少写一个结构体名称

      缺点:只能使用一次,定义的结构体类型同时必须定义变量

  应用场景:当结构体的类型只需要使用一次,并且定义类型的同时定义变量

    作为其他结构体的成员使用

·定义结构体的同时,定义结构体变量初始化

结构体成员部分初始化时,大括号不能省略

如果赋值没有歧义,编译和运行就没有问题

如果赋值推导有歧义,编译就会报错

结构体的成员没有默认值,是不确定的数

结构体变量的使用:

·结构体变量访问结构体成员

·格式: 结构体变量名.成员名;

可以通过访问给成员赋值(存数据)

可以通过访问获取成员得到值(取数据)

·结构体变量未初始化,结构体的成员值随机(不确定)

·结构体变量在定义时,可以初始化(建议用大括号表明数据的范围、结构体成员可以部分初始化,部分初始化时一定要带大括号表明数据范围

结构体数组的定义:

·什么时候需要结构体数组?

比如:需要管理一个学生对象,只需要定义一个struct Student{..};

假如:需要管理多个学生对象,此时就需要一个结构体数组

·三种形式定义结构体数组

  1. 先定义结构体类型,然后定义结构体变量,再将变量存储到结构体数组中

  1. 定义结构体类型,然后定义结构体数组并初始化

  1. 定义结构体类型同时定义结构体数组并初始化

  1. 定义结构体类型同时定义结构体数组,然后通过索引给结构体成员赋值

结构体指针:

·定义:结构体类型的指针变量指向结构体变量或数组的起始地址

·语法:struct结构体名*指针变量列表;

·结构体成员访问:(1)结构体数组名访问结构体成员·格式:结构体数组名 ->成员名;

 (2)结构体成员访问符: .:做测试结构体变量(结构体对象/实例); 也可以叫做结构对象访问成员符;右侧是 结构体成员

                                 ->:左侧是一个指针,也可以叫结构体指针访 问成员符;;右侧是结构体成员

(3)访问结构体成员有两种形式,三种方式:

·类型一:通过结构体对象访问成员

·类型二:通过结构体指针访问成员

①指针引用访问成员

②指针解引用间接访问成员

③结构体数组中元素的访问

注意:

·结构体类型的使用案例:

结构体类型求大小:

·规则:字节对齐(数据在内存中存储在其类型大小的整数倍上)

·首先保证结构体中的成员存储在自身的对齐边界(类型大小的整数倍)

·在满足上面条件下,最终大小要满足最大成员所占存储单元的整数倍

·为什么要使用字节对齐:节省内存,提高访问效率

·柔性数组:柔性数组不占有结构体的大小

共用体/联合体类型:

·定义:使几个不同的百年来占用同一段内存的结构,共用体按定义中需要存储空间最大的    成员来分配存储单元,其他成员也是用该空间,他们的首地址是相同的

·定义格式

·共用体的定义和结构体类型的类似:(1)可以有名字,也可以匿名

                             (2)共用体在定义时也可以定义共用体变量

                             (3)共用在定义时也可以初始化成员

                             (4)共用体也可以作为形参和返回值类型使用

                             (5)共用体也可以定义共用体数组

                                     ...

也就是说结构体的语法,共用体都支持

·注意:(1)共用体弊大于利,尽量少用

  1. 共用体变量在某一时刻只能存一个数据,并且也只能取出一个数
  2. 共用体和结构体都是自定义数据类型,用法类似于基本数据类型
  3. 共用体可以是共用体的成员,也可以是结构体的成员
  4. 结构体可以是共用体的成员,也可以是共用体的成员

枚举:

·定义:我们一般情况下,定义常量使用宏定义(#define 宏名称 值),但是宏定义非常适 合没有关联关系的常量,但是有时候可能需要对一组拥有关系的量进行定义,比如 周一~周日,1月~12月等等,使用宏定义就不是很清晰,这个时候就需要使用枚举。

枚举的存在就是将多个拥有关联关系的常量组织到一起,提高代码的可读性

·说明:

枚举类型定义了一组常量,我们在开发中直接使用这些常量(常用)

   当然枚举类型也可以类似于结构体一样定义变量等操作

     枚举常量有默认值,从0开始一次加一,我们可以在定义是指定他的值,如果个别 没有赋值,可以根据值依次加一推导

·特点:

定义了一组常量,类似于定义了多个自定义常量(宏定义)

提高了代码的可读性(避免了魔术数字)

·语法:

 typedef:

·说明:给类型重命名,不会影响到类型本身

·作用:给已有的类型起别名

·格式:

·应用场景:①数据类型复杂(结构体、共用体、枚举、结构体指针)时使用

②为了跨平台兼容性

例如:·size_t:类型重命名后的数据类型,typedef unsigned long size_t;

·unil_16:类型重命名后的数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第336题回文对

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> palindromePairs(String[] words) {List<List<Integer>> ans new ArrayList<>();int n words.length;for (int i 0; i < n; i) {for (int j 0; j < n…

让科技党狂喜的电动车什么样,新日凯迪拉氮,你值得拥有!

这些年电动车企为了创新可以说“八仙过海&#xff0c;各显神通”&#xff0c;有的深挖智能技术开辟新赛道&#xff0c;有的狂卷性能卷出新场景。然而&#xff0c;真正触动消费者心弦的是&#xff1a;如何实实在在地提升骑行体验。正是洞察了这一核心需求&#xff0c;新日电动车…

如何进行屏幕录制?有哪些免费的录屏软件推荐?

如何进行屏幕录制&#xff1f;有哪些免费的录屏软件推荐&#xff1f; 对于内容创作者、教育工作者和游戏玩家来说。精通屏幕录制技术已成为一项不可或缺的技能&#xff01;本文将深入探讨如何使用市面上的顶级屏幕录制软件&#xff0c;例如嗨格式录屏大师和OBS Studio&#xff…

hyper-v安装window10操作系统

Hyper-V是微软的一款虚拟化产品&#xff0c;是微软第一个采用类似Vmware ESXi和Citrix Xen的基于hypervisor的技术。 目标&#xff1a;在window10的物理机上基于hyper-v运行虚拟window10。 准备条件 准备好window10操作系统&#xff0c;iso、wim、esd等都行&#xff0c;我这…

侧向开敞式通风天窗的设计特点和优势

一、特点 1、侧向开启&#xff1a;与传统的顶开型窗户相比&#xff0c;侧向开敞式通风天窗采用侧向开启的方式&#xff0c;这种设计不仅为室内提供了更大的通风面积&#xff0c;还使得空气流动更加顺畅。 2、防雨功能&#xff1a;设计时考虑防雨需求&#xff0c;能够在下雨时保…

如何在C++ QT 程序中集成cef3浏览器组件去显示网页?

目录 1、问题描述 2、为什么选择cef3浏览器组件 3、cef3组件的介绍与下载 4、将cef3组件封装成sdk 5、如何使用cef3组件加载web页面 5.1、了解CefApp与CefClient 5.2、初始化与消息循环 5.3、如何创建浏览器 5.4、重载CefClient类 6、在qt客户端集成cef组件 7、最后…

VS2022上面运行QT程序

需求&#xff1a;之前是在QT6.6上面运行&#xff0c;现在想试一下VS2022&#xff1a; 操作步骤&#xff1a; 第一步&#xff1a; 在QT的配置软件中安装MSVC 第二步&#xff1a;配置VS 第三步&#xff1a;在VS上面安装QT插件&#xff0c;但是在QT上面安装速度很慢&#xff0c;…

Leetcode面试经典150题-15.三数之和

解法都在代码里&#xff0c;不懂就留言或者私信 class Solution {/**每次做这个题都想着这事最后一次了&#xff0c;但是确实很高频&#xff0c;还是多练练吧基本思路&#xff1a;先把原来的数组按照从小到大的顺序排列&#xff0c;然后我们从头开始确定第一个数&#xff0c;然…

STM32CubeMX stm32不限长度使用DMA收发串口数据

STM32CubeMX 配置 代码 stm32h7xx_it.c /*** brief This function handles UART7 global interrupt.*/ void UART7_IRQHandler(void) {/* USER CODE BEGIN UART7_IRQn 0 */if (UART7 huart7.Instance) // 判断是否是空闲中断{if (__HAL_UART_GET_FLAG(&huart7, UART_FLA…

数据导入导出(EasyExcel)框架入门指南

写在前面 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 文章目录 EasyExcel 框架概述依赖APIExcel 实体类注解写 Excel概念介绍写 Excel 通用参数WriteWorkbookWriteSheetWriteTable 代码…

【Qt】常用控件QRadioButton

常用控件QRadioButton QRadioButton是单选按钮&#xff0c;可以在多个选项中选择一个。 作为QAbstractButton和QWidget的子类&#xff0c;其属性和用法&#xff0c;对于QRadioButton同样适用。 属性说明 checkable 是否能选中 checked 是否已经被选中. checkable 是 checked…

平安养老险宿州中支开展消防培训及逃生演练活动

近日&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;宿州中心支公司邀请助安消防公司袁教官为公司员工开展消防安全知识培训。 培训教官结合近年来火灾典型案例&#xff0c;对火灾的危害、火灾的预防措施、灭火器材的使用进行深入浅出的…

centos 常用软件的安装和使用

redis 安装 0、下载、解压那些的我在这儿就不说了&#xff0c;有不懂的&#xff0c;看我之前写的博客。 1、在安装 redis 之前&#xff0c;我们得先安装它的依赖 yum install gcc-c 2、假设我下载放进的目录是 /usr/local/src/ &#xff0c; 并且 我的版本为 redis-6.0.8 …

数字化转型对金融服务业的影响

数字化转型正在塑造每个行业&#xff0c;从快速消费品到金融&#xff0c;每个行业都受到新兴技术的影响。 那么&#xff0c;数字化转型在金融服务中扮演什么角色&#xff1f;这对招聘前景有何影响&#xff1f; 我们探讨了数字化转型对该行业的影响、其对招聘策略的影响、数据…

适合大学生的耳机排行有哪些?四大TOP级性价比蓝牙耳机合集

大学生生活多彩多姿&#xff0c;耳机也成为了他们日常生活、学习和娱乐中不可或缺的配件。但面对市面上琳琅满目的耳机品牌和型号&#xff0c;选择性价比高且适合自身需求的耳机变得尤为重要&#xff0c;那么适合大学生的耳机排行有哪些&#xff1f;今天我就为大家精选了四大TO…

SpringBoot如何配置动态数据源?原理+实战

若没空探究原理可直接跳转到“实现方式&#xff1a;注解切面”目录 数据源切换方法 Spring对数据源的管理类似于策略模式&#xff0c;不懂策略模式也没关系&#xff0c;其实就是有一个全局的键值对&#xff0c;类型是Map<String, DataSource>。当JDBC操作数据库之时&am…

boot项目:程序包xxxx.xxxx.xxx不存在

你们好&#xff0c;我是金金金。 idea2021版本&#xff0c;在maven项目中运行程序的时候会出现java程序包不存在现象。(属于它的一个小bug) 场景 启动boot项目时报错如下 解决 清理缓存 重新加载所有maven项目 重新启动项目即可 测试 已测试&#xff0c;项目成功启动~ 编写有误…

代码规范 —— Redis 开发规范

优质博文&#xff1a;IT-BLOG-CN 一、开发规范 【1】弱依赖检查与线下确认&#xff1a;Redis必须是弱依赖&#xff0c;即Redis宕机不影响业务。包括超时检查。 【2】是否当存储使用检查&#xff1a;Redis不能作为存储设备来使用&#xff0c;只能作为缓存或状态等场景来使用。…

【Mudo库】实战项目之简要介绍

文章目录 前言一、效果演示二、模块1. 介绍2. 服务器模块3. 应用层模块 尾序 前言 各位C友们&#xff0c;好久不见&#xff0c;最近一个月在搞项目&#xff0c;算是半摆半学的状态吧&#xff0c;博客断更了一段时间&#xff0c;现在项目搞完了&#xff0c;博客之后也会慢慢更新…

机器学习周报(8.12-8.18)

文章目录 摘要Abstract1.Transformer的结构1.1 序列到序列&#xff08;Seq2seq&#xff09;的模型1.2 Transformer 结构1.2.1 Transformer 编码器&#xff08;Encoder&#xff09;1.2.2 Transformer解码器&#xff08;Decoder&#xff09;1.2.3 编码器-解码器注意力&#xff08…