首页 > 其他分享 >C语言学习笔记 Day13(复合类型/自定义类型)

C语言学习笔记 Day13(复合类型/自定义类型)

时间:2024-08-15 18:54:12浏览次数:17  
标签:变量 自定义 struct 指针 C语言 student Day13 结构 赋值

Day13 内容梳理:

目录

Chapter 9  复合类型(自定义类型)

9.1 结构体

(1)结构体变量定义、初始化

(2)嵌套结构体

(3)结构体赋值

(4)结构体和指针

(5)结构体做函数参数

9.2 共用体(联合体)

9.3 枚举

9.4 typedef 关键字


Chapter 9  复合类型(自定义类型)

9.1 结构体

有时需要将不同类型的数组组合成一个整体,比如学生的学号/姓名/性别/年龄等等。单独定义比较繁琐,所以可以用结构体表示,如下:

int stuNum;

char name[20];

char gender;

int age;

(1)结构体变量定义、初始化

一般将结构体的定义写在头文件中,这样每次导入头文件都无需重新定义结构体。

以student及其可能包含的内容为例,一下是定义变量的格式:

初始化变量并赋值一共有3种方法:

        ①逐个调用然后赋值:变量.变量名 = 值;

        ②直接赋值:单个变量 = {值1, 值2……};

        ③结构体名{

                变量1  值1;

                变量2  值2;

            }

;如果是字符串数组,需要通过strcpy_s(结构体变量.变量名, "值")来赋值。

strcpy_s()函数属于<string.h>库,记得在开头加上#include<string.h>

(2)嵌套结构体

比如游戏中的人物信息和技能信息:

(3)结构体赋值

初始化一个结构体变量后,若使另一个结构体变量等于它,则两个都是独立的、互不干扰的。

(4)结构体和指针

可以用指针去打印成员变量。

“结构体指针->成员”这个形式等同于“结构体变量.成员”

(5)结构体做函数参数

①结构体的普通变量做函数参数:

void funct01(struct student temp){
    //内容
}

②结构体的指针变量做函数参数:

void funct02(struct student* p){
    //内容
}

③结构体数组做函数参数:

与指针相比,参数列表多一个数组长度参数length。

void funct03(struct student arr, int length){
    //内容
}

④const修饰结构体指针形变参量

struct student* const p可以改变指针的指向,但改不了所指向内容的值。

void funct04(struct student* const p){
    //可改变指针指向,但不可改变所指向的内容
}

而const struct student* p能改变所指向内容的值,但改变不了指针指向。

void funct05(const struct student* p){
    //可改变内容,不可改变指向
}

9.2 共用体(联合体)

共用体(union)也叫“联合体”,是能在同一存储不同类型数据的类型,其所占的内存长度等于其最长成员的长度倍数(类似最大公倍数)。

共用体变量中,起作用的成员是最后一次存放的成员。每存入一个新成员,原有成员的值就被会覆盖。共用体变量的地址和它自己各成员的地址都是同一个,

下图中,先将int a赋值为100,打印正常。

再将float b赋值为5.5,发现int a的值变味了乱码证明联合体所有变量共享同个地址:

打印共用体各个变量的地址,发现都相同:

9.3 枚举

一一列举出来所有变量的值,而且变量的取值仅限于列举出的这些。

枚举类一般配合switch语句使用,常用于控制流程。

定义格式:

enum 枚举类的名字{
    枚举值列表
};

枚举值是常量,无法在程序中用赋值语句再次赋值。可以规定值,也可以不规定,如下:

 规定值之后就按照值来,输入1打印MON:

不规定值的话,就会像数组一样按下标来跳转,下图中输入1打印TUE而非MON:


 

9.4 typedef 关键字

用途:围殴一种已存在的数据类型(基本类型或自定义的类型)起一个新名字。它不能被用于创建新的类型。

和#define的区别:

typedef仅限于数据类型,无法用在表达式或具体的值上。

另外,#define发生在预处理阶段,而typedef发生在编译阶段。

还有一点需注意,用typedef关键字起的别名是淡蓝色的,而变量都是黑色的。

给变量的数据类型起别名,例子:

给结构体的数据类型起别名,例子:

标签:变量,自定义,struct,指针,C语言,student,Day13,结构,赋值
From: https://blog.csdn.net/m0_75036068/article/details/141169571

相关文章

  • allure报告自定义logo图片和文字
    有时根据项目需要把allure报告的logo换成公司的,步骤如下:1、将自定义的logo图片放到static文件夹中,尺寸大小100*100D:\allure-2.13.9\plugins\custom-logo-plugin\static      2、编辑styles.css文件。    修改和增加如下css:.side-nav__brand{......
  • 全面掌握 Spring Cloud LoadBalancer:从自定义到策略优化的实战教程
    引言在微服务架构中,负载均衡是保障系统高效运行的关键技术之一。无论是服务端负载均衡还是客户端负载均衡,合理的负载均衡策略都能显著提升系统的稳定性和响应速度。本文将从基础概念入手,详细讲解如何在SpringCloud中实现和优化负载均衡,并结合实际案例,帮助读者快速上手并......
  • C语言无脑小游戏三子棋程序
    #include<stdio.h>#include<time.h>#include<stdlib.h>#include<windows.h>#defineROW3#defineCOL3voidmenu();//菜单函数声明voidgame();//游戏函数声明voidInit_board(charboard[ROW][COL],introw,intcol);//棋盘初始化函数声明voidDisplay_board......
  • C语言最后一讲——预处理超详解
    文章目录1.预定义符号2.`#define`定义常量3.`#define`定义宏4.带有副作用的宏参数5.宏替换的规则6.宏函数的对比7.#和##7.1#运算符7.2##运算符8.命名约定9.`#undef`10.命令行定义11.条件编译12.头文件的包含12.1头文件被包含的方式:12.1.1本地文......
  • C语言中的操作符:深入解析与应用
    引言C语言提供了丰富的操作符,用于执行算术运算、逻辑判断、位操作等。这些操作符是编程语言中的基础构件,它们使得程序能够进行复杂的数据处理和逻辑控制。本文将详细介绍C语言中的各种操作符,包括它们的类型、用法和一些实际应用示例。操作符的分类算术操作符算术操作符用于......
  • 自定义JSON名
    lSer:=TMVCJsonDataObjectsSerializer.Create;trylSer.DataSetToJsonArray(MasterDBHelper.Query,lJObj.a['m'],TMVCNameCase.ncLowerCase,[],procedure(constaField:TField;constaJsonObject:TJSONObject......
  • 自定义Starter
    pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://mave......
  • 自定义小灯状态翻转函数
    一、函数原理   函数主要是通过 uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)这个读取指定的I/O口的电平,来实现小灯状态的翻转。二、示例代码voidLED_Blue_Turn(void){ if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0) { GPIO_Se......
  • C语言内存管理,分配、使用、释放以及安全性
    在C++中,内存分配是通过几种不同的方式来管理的。这包括自动存储、静态存储和动态存储。下面分别解释这些存储类别以及如何使用它们进行内存分配。#1,自动存储(AutomaticStorage)这是最常用的存储类型,当一个变量在函数内被声明时,它会自动获得存储空间,并且在函数结束时自动释放。例......
  • C语言指针详解-上
    C语言指针详解-上前言1.指针的基本概念1.1指针是什么1.2指针的声明与初始化1.3取地址符`&`和解引用符`*``&`运算符用于**获取变量的地址**`*`运算符用于访问指针指向的值2.指针的类型常见数据类型的指针指针与数组、字符串数组指针结构体指针函数指针二级指针void指......