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

2024-04-04 07:04

本文主要是介绍C之结构体初始化10种写法总结(九十),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

更多原创,欢迎关注: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};

这篇关于C之结构体初始化10种写法总结(九十)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875113

相关文章

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;