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

本文详细比较了C语言和C++在初始化结构体时的不同方法,包括直接初始化、指定成员初始化、成员顺序初始化等,并提供了代码示例。C++的构造函数和初始化语法更加强大,适合面向对象编程,而C语言则主要通过赋值操作完成初始化。
摘要由CSDN通过智能技术生成

简介: 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};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android系统攻城狮

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值