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

c语言笔记 结构体内嵌套结构体的表示方式

目录

结构体内嵌套结构体

问:我们都该如何去访问该结构体里面的结构体的成员呢?怎么去给里面的成员赋值呢?

说明:

运行上述代码后,输出结果如下:


结构体内嵌套结构体

背景:如果我们在结构体中放结构体,我们可以不写结构体里面结构体的结构体标签,但是我们可以定义结构体里面结构体的变量,定义里面结构体定义变量与不定义变量的表示方式。

问:我们都该如何去访问该结构体里面的结构体的成员呢?怎么去给里面的成员赋值呢?

如果是定义了里面结构体的变量 那么表达里面的成员语法,例如

#include<stdio.h>
struct node
{
    int a;
    struct
    {
        int b;    
    }x;
};
int main()
{
     struct node p;
     p.x.b = 100;也就是表示了结构体变量p里面结构体的成员。
}

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

#include<stdio.h>
struct node
{
    int a;
    struct
    {
        int b;    
    };//匿名的结构体 可以直接访问里面的成员。
};
int main()
{
     struct node p;
     p.b = 100;也就是表示了结构体变量p里面结构体的成员。
}

说明:

  1. 在上面的代码中,node 包含了一个匿名的结构体(即没有给这个内部结构体起名字),这个匿名结构体有成员 b
  2. 由于这个内部结构体没有被外部直接使用,所以可以省略它的标签。
  3. 在使用时,可以直接通过struct node 的实例 p 来访问匿名结构体的成员,例如p.b。
        这种写法在嵌套结构体时可以简化代码,避免不必要的标签定义,使代码更加简洁。        
        如果在结构体中定义了一个内部的结构体,并且给这个内部结构体起了一个变量名,那么你可以通过这个变量名来访问内部结构体的成员。以下是一个示例代码,展示如何访问内部结构体的成员:
#include <stdio.h>

// 定义结构体b,其中包含一个有名字的内部结构体a
typedef struct {
    int x;
    int y;
    struct { // 这里定义了一个内部结构体
        int width;
        int height;
    } a; // 给内部结构体起了一个变量名 a
} struct_b;

int main() {
    struct_b b;
    b.x = 10;
    b.y = 20;
    b.a.width = 100; // 通过变量名 a 访问内部结构体的成员 width
    b.a.height = 200; // 通过变量名 a 访问内部结构体的成员 height

    printf("x: %d, y: %d, width: %d, height: %d\n", b.x, b.y, b.a.width, b.a.height);
    return 0;
}

说明:

  1. 内部结构体的变量名:
  2. 访问内部结构体的成员:

运行上述代码后,输出结果如下:

 x: 10, y: 20, width: 100, height: 200

总结:当内部结构体有变量名时,可以通过 外层结构体实例.内部结构体变量名.内部结构体成员 的方式来访问内部结构体的成员。这种方式明确了成员的层次关系,使代码更加清晰。

相关文章:

  • 二维前缀矩阵
  • 十七、实战开发 uni-app x 项目(仿京东)- 后端指南
  • 5.0 VisionPro调用USB相机的方法与步骤说明(一)
  • Vue 渲染 LaTeX 公式 Markdown 库
  • 问题 | ACOS(X) 与 ACOSD(X)的区别
  • cmake结合qt开发界面程序实例
  • 二、小白学JAVA-认识数据类型【变量】
  • 【数学建模】TOPSIS法简介及应用
  • 在不考虑符号,不考虑溢出的情况下,用循环将字符串转换为整型做乘积 再用字符串形式输出
  • 前端剪贴板操作:从传统方法到现代方案
  • 【数据库】如何用索引优化查询性能
  • Kafka-Exporter 9308端口启用TLS认证的完整指南
  • 机器学习 Day07seaborn库绘图学习
  • 【愚公系列】《高效使用DeepSeek》015-文献摘要生成
  • Qt 读取数据库
  • 《FiLM: Visual Reasoning with a General Conditioning Layer》一种通用的视觉推理条件层方法(代码实现)
  • 技术点提升效率详解
  • VBA代码
  • 基于多头注意机制的多尺度特征融合的GCN的序列数据(功率预测、故障诊断)模型及代码详解
  • 算法训练篇01 -- 力扣283.移动零
  • 气急败坏!20多名台湾艺人被台当局列为“重点核查对象”
  • 李伟任山东省委常委、省纪委书记
  • 小雨伞保险经纪母公司手回集团通过港交所聆讯
  • 昔日千亿房企祥生集团约2.03亿元债权被拍卖,起拍价8000万元
  • “大型翻车现场”科技满满,黄骅打造现代化港口和沿海新城典范
  • 【社论】打破“隐形高墙”,让老年人更好融入社会