当前位置: 首页 > news >正文

c语言笔记 结构体基础

目录

基础知识

结构体定义


基础知识

        在c语言中变量是有类型的,比如整型,char型,浮点型等,这些都是单一的类型,那么如果说我要定义一个学生的信息,那么这些单一的类型是不足以表达一个学生的全部信息,所以我们就要用到结构体的知识,结构体是包含了很多种类型的一种结构,就像是一个大杂烩里面什么东西都有,比如指针,整型,数组,char型甚至是放结构体,唯一不能放的是函数,结构体里面的类型不能再创建的时候赋值,结构体只是创建类型。

结构体定义

struct 结构体标签
{
    成员1,
    成员2,
    成员3
};  //定义了一个结构体类型  此时还不是结构体变量   
结构体标签:用来区分不同的结构体,就像是人的名字一样
成员:可以是任意的类型,char,整型,数组等 甚至是结构体

结构体类型就跟其他的类型是一样的,例如:

结构体的变量类型面加的符号是' ; --- ' 而枚举变量后面的符号是 ' ,';

struct student
{
    int number;
    char name[50];
    char sex[10];
};  //结构体类型

定义一个结构体变量
struct student Jack;   //Jack 就是一个结构体变量
int              a;
int 和 struct student 是一种类型  

        结构体不是系统自带的一种类型,而是我们自己自定义的,不像int类型是系统自带的,与生俱来的。

struct student
{
    成员1;
    成员2;
    成员3;   
}Jack, Pack; // 定义了两个结构体变量 Jack 和 Pack

等价于struct student{成员1;成员2;成员3;} Jack,Pack; 
这个是再定义结构体的时候定义变量  如果说是在主函数的情况下,我们应该这样定义:
#include <stdio.h>
struct node
{
    int a;
};
int main()
{   
    struct node Jack,Pack;//在主函数内这样定义正确 不要重新写一个结构体在初始化定义变量
    Jack.a= 100;                               //那样就会出现语法错误
    Pack.a =30;
    printf("%d %d \n",Jack.a,Pack.a);
    return 0;
}

        Jack就是一个结构体变量,而struct student 是一个结构体类型,就是一种类型打个比方:结构体类型就像是一张施工图的图纸,而结构体变量就是建筑物,这个建筑物是按照施工图来建造的,那么建造的每一个建筑物他们的样貌都是一样的,但是名字不一样;所以结构体变量 可以定义很多个,但是结构体类型只能有一种,一种结构体类型可以定义很多的结构体变量。

注意:

如果在结构体里面定义结构体,那么里面的结构体不用写结构体标签

struct node
{
    int a;
    float d;
    doule e;
    struct 
    {
        int b;
        int c;    
    }x; //x跟a,d,e一样是变量名
}
上面等价于下面
struct node
{
    int a;
    float d;
    doule e;
    struct {int b;int c;}  x; 
    //x跟a,d,e一样是变量名
};    此时的结构体里面的结构体的结构体标签一般是省略的

        当一个结构体a被用作另一个结构体b的内部成员,并且在外部不直接使用结构体a时,通常可以省略结构体a的标签(即结构体名)。这种情况下,结构体a作为一个匿名结构体嵌套在结构体b中。

        相关的结构体里面放结构体的表示方式在我的文章《c语言笔记 结构体内嵌套结构体的表示方式》中。

相关文章:

  • QT QML实现音频波形图进度条,可点击定位或拖动进度
  • 单目3d detection算法记录
  • 24集《不负美食不负卿》联合出品制作签约仪式成功举行
  • 【运维自动化-标准运维】如何实现一个最简单的流程编排
  • 【Redis】Redis的数据删除(过期)策略,数据淘汰策略。
  • [Nowruz 1404] 2025 Crypto/PWN部分
  • 三月九次前端面试复盘:当场景题成为通关密钥
  • 使用 EchoAPI 实现 API 断言的全面指南
  • vulhub/Billu_b0x靶机----练习攻略
  • c盘清理宝藏小工具
  • 使用Trainer传入自定义的compute_metrics函数时,oom报错
  • Diffusion Transformers (DiTs) - 用Transformer革新Diffusion模型
  • 构建高可靠NFS存储:自动化挂载保障机制的设计与优势
  • 【Vuex:在带命名空间的模块内访问全局内容】
  • Docker运行postgreSQL,由于异常启动或者退出后,提示could not locate a valid checkpoint record
  • JS—事件委托:3分钟掌握事件委托
  • vlan初学的总结
  • NLP高频面试题(四)——BN和LN的区别与联系,为什么attention要用LN
  • Visual Studio2022 中的键盘注释快捷方式
  • 多线程(四)----线程安全
  • 龙湖集团:今年前4个月销售220.8亿元,4月新增两块土地储备
  • 湖北宜昌:在青山绿水间解锁乡村振兴“密码”
  • 北京2025年住房发展计划:供应商品住房用地240-300公顷,建设筹集保租房5万套
  • 越秀地产前4个月销售额约411.2亿元,达年度销售目标的34.1%
  • 上海优化营商环境再攻坚,企业和机构有哪些切实感受?
  • 定位真核生物起源于约27.2亿年前,华东师大团队在《自然》发文