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

这篇具有很好参考价值的文章主要介绍了C语言——结构体类型(一)【结构体定义,创建,初始化和引用】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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


结构体类型

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

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

运行结果:
C语言——结构体类型(一)【结构体定义,创建,初始化和引用】,C语言入门基础,c语言,java,开发语言,经验分享,笔记,学习方法


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

到了这里,关于C语言——结构体类型(一)【结构体定义,创建,初始化和引用】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言中结构体初始化并清零的方法有几种?

    结构体初始化清零方法 在C语言中,结构体初始化并清零的方法有以下几种: 手动赋值为0:结构体定义后在函数内手动将每个成员都赋值为0。例如: 使用memset()函数:可以使用  memset()  函数将结构体的所有成员都设置为0。例如: C99标准的方式:C99标准新增了一个特性,可

    2024年02月17日
    浏览(28)
  • 数据结构学习记录——如何建立图(邻接矩阵、邻接表-图节点的结构、创建并初始化、插入变、完整图的建立)

    目录 邻接矩阵 图节点的结构 创建并初始化 插入边 完整的图的建立  邻接表 图节点的结构 创建并初始化 插入边  完整的图的建立  定义结构体GNode,其中包含以下成员变量: Nv:表示图中的顶点数。 Ne:表示图中的边数。 二维数组表示图的邻接矩阵。它的大小是MaxVertexN

    2024年02月06日
    浏览(36)
  • 【数据结构】顺序栈和链栈的基本操作(定义,初始化, 入栈,出栈,取栈顶元素,遍历,置空)

    🎊专栏【数据结构】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【勋章】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰   目录 ⭐栈的分类 ✨顺序栈 🎈优点: 🎈缺点: ✨链栈 🎈优点: 🎈缺点: ⭐基本概念 ✨栈: ✨栈顶: ✨栈顶: ✨图片理

    2023年04月22日
    浏览(39)
  • 数据结构_链表_单向循环链表的初始化、插入、删除、修改、查询打印(基于C语言实现)

    版本: 2024年4月25日 V1.0 发布于博客园 目录 目录 单向循环链表公式 初始化单向循环链表 构建单向循环链表结点 创建一个空链表(仅头结点) 创建一个新结点 插入数据 头插 中插 尾插 删除数据 头删 中删 尾删 查询打印数据 遍历打印 测试 测试结果: 完整代码 CircularLinkedLis

    2024年04月25日
    浏览(40)
  • 数据结构_链表_双向循环链表的初始化、插入、删除、修改、查询打印(基于C语言实现)

    版本: 2024年4月26日 V1.0 发布于博客园 目录 目录 双向循环链表公式 初始化双向循环链表 构建双向循环链表结点 创建一个空链表(仅头结点) 创建一个新结点 插入数据 头插 中插 尾插 删除数据 头删 中删 尾删 查询打印数据 遍历打印 测试 测试结果: 完整代码 DoubleCirLList.h

    2024年04月27日
    浏览(37)
  • 【C++】C++ 引用详解 ⑨ ( 常量引用初始化 | C / C++ 常量分配内存的四种情况 )

    使用 \\\" 普通变量 \\\" 初始化 \\\" 常量引用 \\\" , 就是将 普通变量 赋值给 常量应用 , 也可以理解为 将 变量转为常量 ; 下面的代码 , 就是上述 使用 普通变量 初始化 常量引用 : 在 博客 【C++】C 语言 和 C++ 语言中 const 分析 ( const 左数右指原则 | C 语言中常量的原理和缺陷

    2024年02月10日
    浏览(33)
  • Java集合类型对象的快速初始化

    在Java中, 集合类型的对象初始化, 一般是先创建对象, 然后往集合里面增加元素,这种写法直观,但是撰写代码的时候感觉比较冗余, 是否有什么酷炫的方式简化定义初始化呢? 本篇介绍字符串数组、List 和 Map类型对象的定义初始化简单方式。 常用的写法: 简化的写法

    2024年02月06日
    浏览(30)
  • VMWare 虚拟机创建 + 初始化

    目录 概述 1. VMware创建虚拟机 2. IP 配置 nmtui nmcli 3. Yum 源配置 光盘的Packages作为Yum源 配置开机自动挂载(光盘) 配置私有Yum仓库 跟新私有yum仓库  报错和修复 4. 文件共享系统配置 跟新配置文件/etc/hosts + /etc/yum.repo.d/ftp.repo  同步配置文件 测试yum私有仓库 5. Ansible 安装配置  s

    2024年02月05日
    浏览(29)
  • Python如何创建二维数组和初始化

            严格意义上说,Python中并没有数组的概念,Python中表达一组数据有多种形式,例如list,tuple,set等数据结构都可以表达一组数,并且这组数也没有C和C++中数组的的同质限制,这些数可以是任何一种数据类型。         以list为例(list又叫列表),要想实现一个所

    2024年02月20日
    浏览(38)
  • 如何创建 Xilinx BRAM 或 ROM 初始化文件(.COE)并实现初始化数据在 FPGA 上的载入

    如何创建 Xilinx BRAM 或 ROM 初始化文件(.COE)并实现初始化数据在 FPGA 上的载入 在 FPGA 开发中,初始化数据是一个非常重要的内容,它决定了电路从上电开始的初始状态,对于保证正确性和可靠性有着至关重要的作用。其中,BRAM(Block RAM)和 ROM(Read-Only Memory)是两种常见的

    2024年02月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包