C++之struct匿名结构体实例(二百四十四)

news2025/1/4 0:59:49

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之struct匿名结构体用法。

2.struct匿名结构体用法介绍

C++中的“匿名结构体”通常也被称为“无名结构体”或“未命名结构体”,是指在结构体定义时没有给予其一个特定的名称。它与普通的有名结构体相比,在语法上有一些差异和特殊用法。

  1. 定义匿名结构体:
    匿名结构体和有名结构体的定义语法相同,都是使用struct关键字,但不提供名称。定义匿名结构体主要用于临时的数据组织和封装,通常作为其他数据类型(如类、其他结构体)的成员。
struct {
    int id;
    std::string name;
} student;

在上述代码中,我们使用匿名结构体定义了一个名为student的变量。

  1. 初始化匿名结构体:
    初始化匿名结构体的语法与普通结构体相同,但不能使用结构体名进行初始化。可以使用花括号初始化器或成员初始化列表进行初始化:
// 使用花括号初始化器
student = { 1, "John" };

// 使用成员初始化列表
student = { .id = 2, .name = "Alice" };
  1. 访问匿名结构体的成员:
    访问匿名结构体的成员使用点运算符(.):
std::cout << "ID: " << student.id << ", Name: " << student.name << std::endl;
  1. 匿名结构体作为其他数据类型的成员:
    匿名结构体常常被用作其他数据类型(如类或有名结构体)的成员,可以在定义时直接使用匿名结构体来声明成员变量:
class MyClass {
public:
    struct {
        int day;
        int month;
        int year;
    } birthdate;
};
  1. 限定匿名结构体作用域:
    匿名结构体的作用域默认为定义它的代码块,可以使用代码块来限定匿名结构体的作用域。这样可以避免结构体名称与其他结构体冲突。
{
    struct {
        int id;
        std::string name;
    } student;
    
    student.id = 1;
    student.name = "John";
    
    std::cout << "ID: " << student.id << ", Name: " << student.name << std::endl;
}

3.实例例子

v1.0

#include <iostream>
using namespace std;

struct {
    int x;
    int y;
} point;

int main() {
    point.x = 3;
    point.y = 4;

    cout << "坐标:(" << point.x << ", " << point.y << ")" << endl;
    
    return 0;
}

v2.0

#include <iostream>
using namespace std;

struct {
    string name;
    int score;
} student;

int main() {
    student.name = "张三";
    student.score = 90;

    cout << "姓名: " << student.name << endl;
    cout << "成绩: " << student.score << endl;
    
    return 0;
}

v3.0

#include <iostream>
using namespace std;

struct {
    int width;
    int height;
} rectangle;

int main() {
    rectangle.width = 5;
    rectangle.height = 7;

    cout << "宽度: " << rectangle.width << endl;
    cout << "高度: " << rectangle.height << endl;
    
    return 0;
}

v4.0

#include <iostream>
using namespace std;

struct {
    struct {
        int day;
        int month;
        int year;
    } date;
    struct {
        int hour;
        int minute;
        int second;
    } time;
} datetime;

int main() {
    datetime.date.day = 10;
    datetime.date.month = 12;
    datetime.date.year = 2021;

    datetime.time.hour = 9;
    datetime.time.minute = 30;
    datetime.time.second = 15;

    cout << "日期:" << datetime.date.year << "-" << datetime.date.month << "-" << datetime.date.day << endl;
    cout << "时间:" << datetime.time.hour << ":" << datetime.time.minute << ":" << datetime.time.second << endl;
    
    return 0;
}

v5.0

#include <iostream>
using namespace std;

struct {
    string name;
    int age;
    string department;
} employee;

int main() {
    employee.name = "李四";
    employee.age = 28;
    employee.department = "销售部门";

    cout << "姓名: " << employee.name << endl;
    cout << "年龄: " << employee.age << endl;
    cout << "部门: " << employee.department << endl;
    
    return 0;
}

v6.0

#include <stdio.h>

typedef void (*HWC2_PFN_CREATE_LAYER)();

struct {
  HWC2_PFN_CREATE_LAYER createLayer;
} mDispatch = {};

void myCreateLayer() {
  printf("Creating a layer...\n");
}

int main() {
  mDispatch.createLayer = myCreateLayer;

  // 检查createLayer是否为空,如果不为空则调用函数
  if (mDispatch.createLayer != NULL) {
    printf("Calling createLayer function...\n");
    mDispatch.createLayer();
  } else {
    printf("createLayer function is not assigned.\n");
  }

  return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一篇文章掌握C++操作Access数据库

一、可视化工具 我们都知道oracle数据库的可视化工具有&#xff1a;PLSQL Developer、navicat&#xff08;支持包括oracle的大部分数据库&#xff09;等&#xff0c;Access数据库的可视化工具是&#xff1a;Microsoft Access&#xff0c;我们安装好微软的office就会自带Micros…

YOLOv5:修改backbone为SPD-Conv

YOLOv5&#xff1a;修改backbone为SPD-Conv 前言前提条件相关介绍SPD-ConvYOLOv5修改backbone为SPD-Conv修改common.py修改yolo.py修改yolov5.yaml配置 参考 前言 记录在YOLOv5修改backbone操作&#xff0c;方便自己查阅。由于本人水平有限&#xff0c;难免出现错漏&#xff0c…

【linux】查看下载应用在服务器的日志

查看日志路径 一般在配置文件中logback.xml 账号密码xshell连接服务器&#xff0c;进入日志路径 根据搜索关键字查看xxx.log文件内容 cat xxx.log | grep 关键字 下载 xxx.log 到本地&#xff0c;一般可以下载当天的日志文件到本地查看比较方便 sz xxx.log 参考文章&#xff…

【数字IC设计/FPGA】FIFO与流控机制

流控&#xff0c;简单来说就是控制数据流停止发送。常见的流控机制分为带内流控和带外流控。 FIFO的流水反压机制 一般来说&#xff0c;每一个fifo都有一个将满阈值afull_value&#xff08;almost full&#xff09;。当fifo内的数据量达到或超过afull_value时&#xff0c;将满…

【Leetcode】【中等】260. 只出现一次的数字 III

给你一个整数数组 nums&#xff0c;其中恰好有两个元素只出现一次&#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。 你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。 示例 1&#xff1a; 输入&…

904. 水果成篮(滑动窗口)

目录 一、题目 二、代码 一、题目 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 二、代码 题目实质&#xff1a;找出一个最长的子数组的长度&#xff0c;要求子数组中不超过两种类型的水果哈希表双指针 class Solution { public:int totalFru…

【XOR秘钥破解】异或加密秘钥破解

1、代码 # -*- coding:utf-8 -*- import binasciioriginal_text input("请输入XOR加密前&#xff08;字 符 串&#xff09;&#xff1a;") encrypted_text input("请输入XOR加密后&#xff08;十六进制&#xff09;&#xff1a;")# 先将original_text文…

P1004 [NOIP2000 提高组] 方格取数

[NOIP2000 提高组] 方格取数 - 洛谷 用四维dp数组存储&#xff0c;如果两个路线走到重复点&#xff0c;减去一个当前位置的值即可。 #include <bits/stdc.h> using namespace std; const int N 11; int grid[N][N] {0}; int dp[N][N][N][N] {0}; int n, i, j, tmp; v…

中级职称评审为什么要找机构?甘建二给你分析

职称申报为什么要找机构代理呢&#xff1f;主要是机构可以帮助整理业绩和各种申报材料&#xff0c;而且还可以帮忙网上申报。让您不会错过申报时间什么的&#xff0c;平时个人都是上班太忙了&#xff0c;没有空准备申报材料之类的各种&#xff0c;而且随时掌握申报信息&#xf…

基于springboot零食商城

基于springboot零食购物商城 摘要 基于Spring Boot的零食商城是一个现代化的电子商务平台&#xff0c;旨在为零食爱好者提供便捷的购物体验。该平台使用Spring Boot框架构建&#xff0c;以确保高效的开发和部署。它提供了用户注册、登录、个性化账户管理&#xff0c;以及展示各…

ubuntu18设置root密码

Ubuntu18启用root设置密码 第一步&#xff0c;使用sudo -i命令进入超级用户。 第二步&#xff0c;输入命令passwd root&#xff0c;进入root密码设置。 第三步&#xff0c;输入root的密码。 第四步&#xff0c;再次输入root密码进行确认。 若是修改其他用户的密码&#xff0c;可…

牛客TOP101-判断链表中是否有环

前言 本文以Java为语言讲解【判断链表中是否有环】这一题&#xff0c;题目来源【牛客TOP101】 题目描述 输入用例 解题思路 Hash表法 对于这道题&#xff0c;比较容易想到的可能是使用hash表&#xff0c;因为如果是有环&#xff0c;那么就意味着&#xff0c;在遍历过程中…

c++之类和对象

1.auto 可以自动推导结果的类型 typeid()可以打印类型 引用也可以 auto真正的价值可以简化迭代器的写法 并且auto定义的变量必须初始化。 不能做参数 返回值也不可以用auto auto不能用来声明数组 如果想要修改要用引用且指针不好解决。 c11之后的nullptr 以后再用空指针用nul…

qt采用C++/CLI 方式调用C#dll的封装方法(高阶应用)

简单讲讲需求&#xff1a;cpp作为主程序&#xff0c;c#作为第三方程序被调用&#xff0c;并且需要在c#代码里调用主程序里的方法 C#写的dll是没有dllMain入口函数的&#xff0c;是一种中间语言&#xff0c;需要.Net运行时进行做本地化工作&#xff0c;因此如果要调用C#写的dll…

OpenStack云计算平台实战-----创建空白虚拟机

1、创建空白虚拟机 需要注意的步骤会截图一下&#xff0c;其它的基本都是下一步&#xff0c;默认的即可 建议将虚拟机命名为自己的名字加后缀 将处理器数量和每个处理器的内核量都修改为2 将虚拟机的内存设置为8G&#xff0c;不然不够用 将指定磁盘大小设置为200G&#xff0c;…

面试题:什么是微服务 ?

文章目录 微服务是什么微服务是什么样的服务化的前提服务的发布与引用声明式Restful API服务的注册与发现一致性与可用性注册方式存储结构服务健康监测状态变更通知 服务的远程通信网络I/O的处理传输协议序列化方式 注册中心如何保障稳定性节点信息的保障服务节点的摘除服务节点…

微信分销小程序商城的作用是什么

众人拾柴火焰高&#xff0c;分销商城值得是商家通过一定比列的佣金或奖品激励会员或用户分销商品/服务的手段&#xff0c;以低成本获得高收益&#xff0c;也成为不少线上线下商家寻求增长的一种方法。 商家难以完善“引流拓客-转化-留存-复购-裂变-分享”等路径&#xff0c;导…

游戏反虚拟框架检测方案

游戏风险环境&#xff0c;是指独立于原有设备或破坏设备原有系统的环境。常见的游戏风险环境有&#xff1a;iOS越狱、安卓设备root、虚拟机、虚拟框架、云手机等。 因为这类风险环境可以为游戏外挂、破解提供所需的高级别设备权限&#xff0c;所以当游戏处于这些设备环境下&am…

Element UI 密码输入框--可切换显示隐藏,自定义图标

<el-form-item prop"password"><el-inputkeyup.enter.native"login"placeholder"密码"v-model"formData.password":type"showPassword ? text : password"><i slot"suffix" click"switchPas…

策略模式在社会中的应用

文章目录 &#x1f31f; 如何将设计模式策略模式运用到社会当中&#x1f34a; 什么是策略模式&#x1f34a; 策略模式在社会中的应用&#x1f389; 1. 政治选举&#x1f389; 2. 商业竞争&#x1f389; 3. 教育培训 &#x1f34a; 策略模式的优缺点&#x1f389; 优点&#x1f…