C之结构体初始化10种写法总结(九十)

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

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课原创干货持续更新中……】🚀

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

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

欢迎关注Android系统攻城狮

1.前言

本篇目的:C之结构体初始化10种写法总结

2.C语言和C++语言在初始化结构区别

  • C语言和C++语言在初始化结构体方面存在一些显著的区别,这些区别主要源于两种语言在编程范式和特性支持上的差异。下面将分别介绍C语言和C++语言在初始化结构体时的不同做法,并总结其间的差异。

  • 在C语言中,结构体的初始化主要依赖于赋值操作。由于C语言是一种过程式编程语言,它不直接支持对象的构造和析构,因此结构体通常通过赋值语句或函数调用进行初始化。例如,可以定义一个结构体变量,然后逐个为其成员赋值。这种方法虽然直接,但相对繁琐,特别是在结构体成员较多时。

  • 此外,C语言还提供了指定初始化器(designated initializer)的特性,允许开发者在初始化时直接指定结构体成员的值。这种特性在一定程度上提高了初始化的灵活性,但仍然需要显式地为每个成员赋值。

  • 相比之下,C++语言在初始化结构体方面提供了更为丰富和强大的支持。C++是一种面向对象的语言,它支持构造函数和析构函数等特性,- 使得结构体的初始化更加便捷和高效。在C++中,可以为结构体定义构造函数,通过构造函数在创建结构体对象时自动完成初始化工作。这种方式不仅减少了代码量,还提高了代码的可读性和可维护性。

  • 此外,C++还支持列表初始化(list initialization)和统一初始化语法(uniform initialization),使得结构体的初始化更加直观和简洁。通过使用花括号{}和等号=的组合,可以一次性为结构体的所有成员赋值,无需显式指定每个成员的名称。这种语法不仅适用于结构体,还适用于类、数组等其他类型。

  • 综上所述,C语言和C++语言在初始化结构体方面存在明显的区别。C语言主要通过赋值操作进行初始化,而C++则提供了更为强大和灵活的构造函数和初始化语法支持。这些差异反映了两种语言在编程范式和特性支持上的差异,也使得开发者在选择使用哪种语言时需要根据具体需求进行权衡。

3.代码实例

<1>.直接初始化

struct MyStruct {int x;double y;
};struct MyStruct s1 = {10, 3.14};

<2>.指定成员初始化

struct MyStruct {int x;double y;
};struct MyStruct s2 = { .x = 10, .y = 3.14 };

<3>.使用成员顺序初始化

struct MyStruct {int x;double y;
};struct MyStruct s3 = {10, 3.14};

<4>.逐个赋值初始化

struct MyStruct {int x;double y;
};struct MyStruct s4;
s4.x = 10;
s4.y = 3.14;

<5>.使用临时结构体

struct MyStruct {int x;double y;
};struct MyStruct s5 = { .x = 10, .y = 3.14 };

<6>.使用memset清零结构体后再赋值

struct MyStruct {int x;double y;
};struct MyStruct s6;
memset(&s6, 0, sizeof(struct MyStruct));
s6.x = 10;
s6.y = 3.14;

<7>.使用动态内存分配

struct MyStruct {int x;double y;
};struct MyStruct *s7 = malloc(sizeof(struct MyStruct));
if (s7 != NULL) {s7->x = 10;s7->y = 3.14;
}

<8>.使用静态初始化:

struct MyStruct {int x;double y;
};struct MyStruct {int x;double y;
} s8 = {10, 3.14};

<9>.使用memcpy

struct MyStruct {int x;double y;
};struct MyStruct s9;
int tempX = 10;
double tempY = 3.14;
memcpy(&s9, &(struct MyStruct){tempX, tempY}, sizeof(struct MyStruct));

<10>.使用复合字面量

struct MyStruct {int x;double y;
};struct MyStruct s10 = (struct MyStruct){10, 3.14};

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

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

相关文章

基于Java微信小程序的医院挂号小程序,附源码

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

pytest中文使用文档----12缓存:记录执行的状态

1. cacheprovider插件 1.1. --lf, --last-failed&#xff1a;只执行上一轮失败的用例1.2. --ff, --failed-first&#xff1a;先执行上一轮失败的用例&#xff0c;再执行其它的1.3. --nf, --new-first&#xff1a;先执行新加的或修改的用例&#xff0c;再执行其它的1.4. --cache…

Spring Boot 整合 RabbitMQ 实现延迟消息

关于 RabbitMQ 消息队列&#xff08;Message Queuing&#xff0c;简写为 MQ&#xff09;最初是为了解决金融行业的特定业务需求而产生的。慢慢的&#xff0c;MQ 被应用到了更多的领域&#xff0c;然而商业 MQ 高昂的价格让很多初创公司望而却步&#xff0c;于是 AMQP&#xff0…

网络基础二——传输层协议UDP与TCP

九、传输层协议 ​ 传输层协议有UDP协议、TCP协议等&#xff1b; ​ 两个远端机器通过使用"源IP"&#xff0c;“源端口号”&#xff0c;“目的IP”&#xff0c;“目的端口号”&#xff0c;"协议号"来标识一次通信&#xff1b; 9.1端口号的划分 ​ 0-10…

uniapp将图片地址base64格式相互转换

1、下载image-tools插件并安装 npm i image-tools --save-dev 2、引入image-tools import { pathToBase64, base64ToPath } from image-tools 3、将图片转换成base64格式 create() {// 图片转化为base64格式pathToBase64(/static/logo.png).then(res> {console.log(res…

2024年腾讯云4核8G服务器性能可以满足哪些使用场景?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

【Redis】分布式锁及其他常见问题

分布式锁及其他常见问题 1. 我看你的项目都用到了 Redis&#xff0c;你在最近的项目的哪些场景下用到了 Redis 呢&#xff1f; 一定要结合业务场景来回答问题&#xff01;要是没有不要硬讲&#xff0c;除非面试官问&#xff1b; 接下来面试官将深入发问。 你没用到的也可能会…

【opencv】教程代码 —video(2) optical_flow (稀疏光流、稠密光流)

1. optical_flow.cpp 稀疏光流 #include <iostream> // 引入输入输出流库 #include <opencv2/core.hpp> // 引入OpenCV的核心功能模块 #include <opencv2/highgui.hpp> // 引入OpenCV的高级GUI模块&#xff0c;提供显示图像的功能 #include <opencv2/imgp…

Python | NCL风格 | EOF | 相关 | 回归

这里在linux系统上使用geocat实现NCL风格的图片绘制 geocat Linux上安装 geocat conda update condaconda create -n geocat -c conda-forge geocat-vizconda activate geocatconda update geocat-viz Dataset - NOAA Optimum Interpolation (OI) SST V2 # 海温月平均数据- lsm…

C++核心高级编程 --- 4.类和对象

文章目录 第四章&#xff1a;4.类和对象4.1 封装4.1.1 封装的意义4.1.2 struct与class的区别 4.2 对象的初始化和清理4.2.1 构造函数和析构函数4.2.2 构造函数的分类及调用4.2.3 拷贝构造函数调用时机4.2.4 构造函数调用规则4.2.5 深拷贝与浅拷贝4.2.6 初始化列表4.2.7 类对象作…

Qt | Qt 快速入门(零基础)

01 Qt 简介 1、Qt 是一个跨平台的 C++图形用户界面库,说简单点,Qt 的本质就是一个 C++类库,使用Qt 就是怎样使用 Qt 类库中的类及其类中的成员函数的问题。在 QT5 中 QML(这是一种声明性语言)和 Qt Quick 成为 Qt 的核心之一,但 C++仍是 QT 的核心。 2、Qt 是跨平台的,也…

数据结构——顺序表实现通讯录

目录 前言 一、基于动态顺序表实现通讯录 二、代码具体实现 2.1 初始化通讯录 2.2 添加通讯录数据 2.3 展示通讯录 2.4 按名字来查找通讯录信息 2.5 删除通讯录的数据 2.6 查找通讯录的数据 2.7 修改通讯录的数据 2.8 销毁通讯录 上传通讯录数据 写入通讯录数据 三、完整代码 总…

基础之重蹈覆辙

MESI缓存一致性协议 前&#x1f33d;&#xff1a; 高速缓存底层数据结构&#xff1a;拉链散列表的结构 bucket - cache entry - tag主内存地址 cache line缓存数据 flag缓存行状态 cache line64字节 有效引用主内存地址&#xff0c;连续的相邻的数据结构 读取特别快 处理器…

关于Tomcat双击startup.bat 闪退的解决⽅法

详解Tomcat双击startup.bat 闪退的解决⽅法 作为⼀个刚学习Tomcat的程序猿来说&#xff0c;这是会经常出现的错误。 1.环境变量问题 1.1 ⾸先需要确认java环境是否配置正确&#xff0c;jdk是否安装正确 winR打开cmd&#xff0c;输⼊java 或者 javac 出现下图所⽰就说明jdk配置正…

AI与技术美术(TechArt)

AI技术与TA 人工智能&#xff08;AI&#xff09;技术在技术美术&#xff08;TechArt&#xff09;领域的应用&#xff0c;为创业者开辟了一片新的天地。技术美术作为一个跨学科领域&#xff0c;融合了传统美术和现代技术&#xff0c;特别是AI技术&#xff0c;以创造新型的艺术表…

spark-hive连接操作流程、踩坑及解决方法

文章目录 1 简介2 版本匹配3 spark hive支持版本源码编译3.1 spark-src下载3.2 maven换源3.3 spark编译 4 hive 安装与mysql-metastore配置4.1 mysql下载安装4.1.1 为mysql设置系统环境变量4.1.2 初次登陆更改root身份密码4.1.3 安装后直接更改密码 4.2 hive初始化4.2.1 编写hi…

【leetcode面试经典150题】10.跳跃游戏 II(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

pycharm pyspark连接虚拟机的hive表 读取数据

方法&#xff1a; hive配置hiveserver2和metastore url <!-- 指定hiveserver2连接的host --> <property><name>hive.server2.thrift.bind.host</name><value>hadoop111</value> </property><!-- 指定hiveserver2连接的端口号 -…

langchain + azure chatgpt组合配置并运行

首先默认你已经有了azure的账号。 最重要的是选择gpt-35-turbo-instruct模型、api_version&#xff1a;2023-05-15&#xff0c;就这两个参数谷歌我尝试了很久才成功。 我们打开https://portal.azure.com/#home&#xff0c;点击更多服务&#xff1a; 我们点击Azure OpenAI&#…

华为ensp中ospf多区域管理 原理及配置命令(详解)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; ————前言———— OSPF 多区域的主要作用是缩小链路状态数据库和路由表的规模&#xff0c;减少路由更新的频率&#xff0c;提高网络的可扩展性&#xff0c;实现路由过滤和路由汇总&#xff0…