C语言——结构体类型(一)【结构体定义,创建,初始化和引用】

📝前言:
在实际编程过程中,我们可能会希望把一些关联的数据存放在一起,这样方便我们使用。但是这些数据的类型有时候并不一致,例如一个学生的信息:有名字(字符串),有年龄(整数),性别(字符)······这时候,我们就可以使用自定义类型——结构体类型将这些类型不一样的关联数据放在一个结构体类型里面
这篇文章我们来讲讲结构体类型
1,结构体的定义
2,结构体变量的创建与初始化
3,结构体成员的引用

🎬个人简介:努力学习ing
📋个人专栏:C语言入门基础
🎀CSDN主页 愚润求学
🌄每日鸡汤:未来是怎么来的?未来不是等来的!


文章目录

  • 结构体类型
    • 一,结构体类型的定义(声明)
      • 1,一般结构体定义
      • 2,组合型结构体定义
    • 二,结构体变量的创建与初始化
      • 1,变量的创建(定义)
        • (1)先定义结构体类型,在创建结构体变量
        • (2)定义结构体类型,同时创建结构体变量
        • (3)通过定义无名结构体类型来定义结构体变量
      • 2,变量的初始化
        • (1)按照结构体顺序初始化
        • (2)按照指定的顺序初始化
    • 三,结构体成员的引用

结构体类型

一,结构体类型的定义(声明)

1,一般结构体定义

C语言中结构体类型的定义形式:
struct  结构体名
{成员项表列
}//在定义结构体类型的时候,成员不需要初始化;当我们创建了变量时,才需要对变量成员初始化

例如我们要定义一个【有名字(字符串),有年龄(整数),性别(字符)】的结构体类型,名字叫stu:
定义形式如下👇🏻

struct stu
{char name[20];int age;char sex;
}

2,组合型结构体定义

比如我们要在上面stu结构体的基础上补充一个出生日期(出生日期还要包括:年,月,日)
这个时候,我们就可以多定义一个能够记录出生日期的date结构体类型,然后再在定义学生结构体类型的时候,引用这个date结构体
具体定义形式如下👇🏻

struct date
{int year;int month;int day;
};
struct stu
{char name[20];int age;char sex;struct date birthday;
};

注意:
在定义组合型的结构体类型时,一定要遵守先定义后使用的原则。
例如:定义上面的stu结构体时,成员birthday是一个结构体变量,那我们就要保证birthday这个结构体变量的结构体类型在之前已经先定义过了(在这里也就是date已经先定义了)

二,结构体变量的创建与初始化

1,变量的创建(定义)

(1)先定义结构体类型,在创建结构体变量
struct stu   /*定义学生结构体类型*/
{char name[20];   /*姓名*/int age;        /*年龄*/char sex;      /*性别*/
};
struct stu s1,s2;   /*定义结构体变量*/

利用这种定义形式,可以在程序的任何地方,在先定义后使用的原则下,定义属于改结构体类型的变量

(2)定义结构体类型,同时创建结构体变量
struct stu   /*定义学生结构体类型*/
{char name[20];   /*姓名*/int age;        /*年龄*/char sex;      /*性别*/
}s1,s2;    /*同时定义结构体变量*/

将变量直接定义在结构体类型的后面,采用这样的定义方式,在书写上比较紧凑。但对要多处定义结构体变量不方便

(3)通过定义无名结构体类型来定义结构体变量
struct     /*无结构体名*/
{char name[20];   int age;        char sex;      
}s1,s2;    /*同时定义结构体变量*/

但是,由于该定义方式无法记录该结构体的类型,所以,这种定义形式除了直接定义变量外,不能再定义该结构体的其他变量。(这样的定义,使程序的扩展性受到很大限制,所以建议少用这种方式定义结构体变量)

2,变量的初始化

struct stu   
{char name[20];   int age;        char sex;      //我们用B表示男,用G表示女
};

假如我们要创建两个上面这种结构体类型的变量,并初始化:

(1)按照结构体顺序初始化
struct stu s1 = {"zhangsan",20,'B'};
struct stu s2 = {"wangwu",18,'G'};
(2)按照指定的顺序初始化

其实也就是用到了对结构体成员的引用

struct stu s1 = {.age = 20, .name = "zhangsan", .sex = 'B'};
struct stu s2 = {.age = 18, .name = "wangwu", .sex = 'G'};

当然,在定义结构体类型的同时,创建的结构体变量,也可以同时初始化

struct stu 
{char name[20];   int age;        char sex;    
}s1 = {"zhangsan",20,'B'};

三,结构体成员的引用

对结构体成员的引用我们需要使用到运算符“.”

使用格式:
结构体类型变量名.成员名
如:s1.age

每使用一次.运算符,其实就是拨开了一层。
赋值时,我们需要找到最内层的(能赋值的)成员
例如👇🏻

#include<stdio.h>
struct date
{int year;int month;int day;
};
struct stu
{char name[20];int age;char sex;struct date birthday;
};
int main()
{struct stu s1 = { "zhangsan",20,'B',{2005,1,1} };printf("%d\n", s1.age);printf("%d\n", s1.birthday.day);
}

这个程序里的结构体类型stu是内包含一个结构体成员birthday的,所以当我们要引用birthday里面的成员时,我们就需要再用一次.运算符:s1.birthday.day

运行结果:
在这里插入图片描述


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互信息,条件熵,联合熵

看到一个图介绍互信息&#xff0c;条件熵&#xff0c;联合熵&#xff0c;还不错&#xff0c;做个记录&#xff1a; 图上的红色和黄色圈分别代表X,Y原始的信息量H(X)/H(Y)/熵值。 &#xff08;注意信息量度量的是一个具体事件发生了所带来的信息&#xff0c;而熵则是在结果出来…

OSPF基础

0x00 前言 本篇简述OSPF相关知识 0x01 正文 为什么需要动态路由协议 静态路由无法适应较大的网络无法动态的随着网络的变化而自动化&#xff0c;耗费人力 动态路由协议 什么是BGP协议 基于距离矢量算法修改后的算法形成协议&#xff0c;被称为路径矢量路由协议 BGP工作…

php-ffmpeg运用 合并视频,转码视频

下载 官网 windows 版本 添加环境变量 合并视频 public function test_that_true_is_true(): void{ini_set(memory_limit,-1); //没有内存限制set_time_limit(0);//不限制执行时间//ffmpeg配置$path [ffmpeg.binaries > D:\soft\ffmpeg\bin/ffmpeg.exe,ffprobe.binaries…

Vue项目在本地跑起来 所有路径前面想加入前缀进行访问配置

一、业务场景&#xff1a; 在本地项目跑起来了&#xff0c;访问时想在所有路径后面加dev进行访问 二、目前效果 三、具体实现步骤&#xff1a; &#xff08;1&#xff09;实现静态文件加前缀 在vue.config.js文件里改变路径 publicPath: process.env.NODE_ENV "product…

云原生Kubernetes: Kubeadm部署K8S 1.29版本 单Master架构

目录 一、实验 1.环境 2.K8S master节点环境准备 3.K8S master节点安装kubelet、kubeadm、kubectl 3.K8S node节点环境准备与软件安装 4.K8S master节点部署服务 5.K8S node节点部署 6.K8S master节点查看集群 7.容器网络&#xff08;CNI&#xff09;部署 8.K8S 集群…

【VUE】无法加载文件 \node\vue.ps1,因为在此系统上禁止运行脚本。问题解决

问题描述 在VS Code中输入vue create -p dcloudio/uni-preset-vue uniapp-demo命令时报错 无法加载文件 D:\address\node\vue.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Executi…

九、分布式锁 —— 超详细操作演示!!!

九、分布式锁 —— 超详细操作演示&#xff01; 九、分布式锁9.1 分布式锁的工作原理9.2 问题引入9.2.1 场景9.2.2 实现9.2.3 分析 9.3 setnx 实现方式9.3.1 原理9.3.2 实现9.3.3 问题 9.4 为锁添加过期时间9.4.1 原理9.4.2 实现9.4.3 问题 9.5 为锁添加标识9.5.1 原理9.5.2 实…

期货日数据维护与使用_日数据维护_主力合约计算逻辑

目录 主力合约换月规则&#xff08;文化财经&#xff09; 主力合约计算逻辑 数据准备 代码 ​下载 主力合约换月规则&#xff08;文化财经&#xff09; 主力合约计算逻辑 数据准备 本文以沪银为例&#xff0c;将沪银所有日数据文件放入一个文件夹中&#xff0c;文件名命…

前端八股文(网络篇)一

目录 1.Get和Post的请求的区别 2.常见的HTTP请求头和响应头 3.常见的HTTP请求方法 4.HTTP与HTTPS协议的区别 5.对keep-alive的理解 6.页面有多张图片&#xff0c;HTTP是怎样的加载表现&#xff1f; 7.HTTP请求报文是什么样的&#xff1f; 8.HTTP响应报文是什么样&#x…

Spring——基于注解的AOP配置

基于注解的AOP配置 1.创建工程 1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"…

为什么制作文件二维码?文件做成二维码的优势

现在经常会遇到查看或者下载文件的情况&#xff0c;通过这种方式来完成文件的传递&#xff0c;那么为什么将文件做成二维码的方式来展示呢&#xff1f;二维码的优势有很多&#xff0c;比如能够让更多人同时获取内容才&#xff0c;方便更快的传播&#xff0c;而且没有有效期的限…

Ant Design 日期选择器 a-date-picker 的使用

代码如下&#xff1a; data() {return {initializationTime: } },<a-form-item label"上映时间" :labelCol"labelCol" :wrapperCol"wrapperCol"><a-date-pickerv-model"initializationTime"format"YYYY-MM-DD HH:mm:ss&…