C++结构体初始化方法

这篇具有很好参考价值的文章主要介绍了C++结构体初始化方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 C++ 里可以将结构体看作没有任何成员函数的对象,下面对 C++ 结构体的几种初始化方法进行总结。



直接赋值

#include <bits/stdc++.h>
using namespace std;
struct Date
{
    int year;
    double month;
    string day;
};

int main()
{
    // 第1种方法
    Date date1;
    date1.year = 2022;
    date1.month = 7.0;
    date1.day = "22";
    cout<<date1.year<<" "<<date1.month<<" "<<date1.day<<endl;

    // 第2种方法
    Date date2 = {2022, 7.0, "22"}; // 顺序赋值
    cout<<date2.year<<" "<<date2.month<<" "<<date2.day<<endl;
    return 0;
}

如果只是想全部初始化为 0 可以按照如下方法

#include <bits/stdc++.h>
using namespace std;
struct Date
{
    int year;
    double month;
    string day;
};

int main()
{
    // 第一种方法
    Date date1 = {}; // 初始完后字符串为空串
    cout<<date1.year<<" "<<date1.month<<" "<<date1.day<<endl; // 0 0

    // 第二种方法 (注意只有0能将所有变量初始化为0,使用其他数字只能将第一个数初始化为1其他仍为0)
    Date date2 = {0}; // 初始完后字符串为空串
    cout<<date2.year<<" "<<date2.month<<" "<<date2.day<<endl; // 0 0
    return 0;
}

结构体包含数组(数组在结构体变量定义完就初始化为0)

#include <bits/stdc++.h>
using namespace std;
struct Date
{
    int year;
    double month;
    string day;
    int a[10];
};

int main()
{
    Date date2 = {2022, 7.0, "22", {1}}; // 顺序赋值
    cout<<date2.year<<" "<<date2.month<<" "<<date2.day<<" "<<date2.a[0]<<" "<<date2.a[1]<<endl; //2022 7 22 1 0
    return 0;
}


利用函数赋值

直接赋值的方法虽然很直观,但是如果需要初始化多个结构体变量,那么代码量为很多且很冗余,而顺序赋值的方式会因为参数过多而容易出错,因此我们可以利用函数来为结构体变量赋值。

#include <bits/stdc++.h>
using namespace std;
struct Date
{
    int year;
    double month;
    string day;
    int a[10];
};

Date init( int year, double month, string day)
{
    Date temp;
    temp.year = year;
    temp.month = month;
    temp.day = day;
    memset(a, 0, sizeof(a)); // 需要memst进行初始化,不然a数组不会被初始化为0
    return temp;
}
int main()
{
    Date date = init(2022, 7.0, "22");
    cout<<date.year<<" "<<date.month<<" "<<date.day<<" "<<date.a[0]<<endl; // 2022 7 22 0
    return 0;
}

需要注意的是,结构体=结构体是浅拷贝,简单变量没问题,动态分配的变量会出问题。


构造函数初始化

引言提到,在 c++ 中可以将结构体看作没有任何成员函数的对象,因此也可以使用构造函数进行初始化。

#include <bits/stdc++.h>
using namespace std;
struct Date
{
    int year;
    double month;
    string day;
    int a[10];
    Date()
    {
        year = 2022;
        month = 7.0;
        day = "22";
    }
    Date(int year) //这里可以使用 Date(int year=0) 来指定year默认值,但是这样就不能有Date()
    {
        this->year = year;
        month = 7.0;
        day = "22";
    }
};

int main()
{
    // 默认值初始化
    Date date1;
    cout<<date1.year<<" "<<date1.month<<" "<<date1.day<<" "<<date1.a[0]<<endl; // 2022 7 22 0

    // 指定一个值
    Date date2(2022);
    cout<<date2.year<<" "<<date2.month<<" "<<date2.day<<" "<<date2.a[0]<<endl; // 2022 7 22 0
    return 0;
}

当然除了指定一个 year, 我们也可以指定 month、day 等,这里就不详细展开了。
我们可以用冒号操作来简化构造函数的写法。文章来源地址https://www.toymoban.com/news/detail-590693.html

#include <bits/stdc++.h>
using namespace std;
struct Date
{
    int year;
    double month;
    string day;
    int a[10];
    Date() : year(2022),month(7.0),day("22"){}
    Date(int year) : year(year),month(7.0),day("22") {}//这里可以使用 Date(int year=0) 来指定year默认值,但是这样就不能有Date()
};

int main()
{
    // 默认值初始化
    Date date1;
    cout<<date1.year<<" "<<date1.month<<" "<<date1.day<<" "<<date1.a[0]<<endl; // 2022 7 22 0

    // 指定一个值
    Date date2(2022);
    cout<<date2.year<<" "<<date2.month<<" "<<date2.day<<" "<<date2.a[0]<<endl; // 2022 7 22 0
    return 0;
}

到了这里,关于C++结构体初始化方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】【数据结构】循环队列的基本操作(初始化、入队、出队、取队头元素、遍历输出队列、求队列长度)顺序队列的算法实现【附全代码】

    使用c++完成数据结构循环队列的基本操作,包括(初始化、入队、出队、取队头元素、遍历输出队列、求队列长度等),可直接编译运行。 队列 又称为 “先进先出” (FIFO)线性表。限定插入操作只能在队尾进行,而删除操作只能在队首进行。 循环队列 ——采用 顺序存储结构

    2023年04月16日
    浏览(53)
  • C++之初始化列表详细剖析

    初始化列表:以一个 冒号开始 ,接着是一个以 逗号分隔的数据成员列表 ,每个 \\\"成员变量\\\" 后面跟一个 放在括号中的初始值或表达式。 不知道大家有没有想过这样一个问题,成员函数明明可以在函数内部对成员变量进行赋值,那为什么还要搞出初始化列表这个东西呢?这个

    2024年02月06日
    浏览(58)
  • C++ | 谈谈构造函数的初始化列表

    我们知道,对于下面这个类A的成员变量 _a1 和 _a2 属于【声明】,还没有在内存中为其开辟出一块空间以供存放,真正开出空间则是在【定义】的时候,那何时定义呢?也就是使用这个类A去实例化出对象的时候 这个对象的空间被开出来了,难道里面的成员变量就一定开出空间

    2023年04月11日
    浏览(100)
  • 【C++奇遇记】构造函数 | 初始化列表

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 🐤本篇文章将讲授C++的初始化列表相关的知识

    2024年02月12日
    浏览(57)
  • C语言结构体的初始化方式

    逐个初始化字段 :这是最直接的方式,你可以逐个为结构体的每个字段进行初始化。 2.使用结构体字面值初始化 :这种方式允许你在初始化时使用一个字面值来为结构体提供初始值 3. 全局初始化 :在全局范围内,你可以在变量声明时就进行初始化。 4. 使用  memset  函数 :

    2024年02月09日
    浏览(57)
  • C++中包含初始化列表的构造函数

    构造函数对初始化成员变化很有用。另一种初始化成员的方式是使用初始化列表。对于程序中接受两个参数的构造函数,其包含初始化列表的变种类似于下面这样: 格式为: :成员变量1(参数1),成员变量2(参数2) 编译器会将初始化列表一一转换成代码,并将这些代码放

    2024年02月05日
    浏览(55)
  • C++二维数组的初始化赋值及示例

    C++二维数组可以看作一个表格,横向为表格的行,纵向为表格的列,数组定义时行号在前,列号在后。二维数组的定义格式为: 数据类型  数组名[常量行表达式][常量列表达式] 。 二维数组的元素是按先行后列的顺序存放的,例如,定义一个int a[3][2]的数组,其形式为: a[

    2024年02月12日
    浏览(56)
  • C语言:结构体数组的使用和初始化:

    前文:在C语言中,结构体是经常会用到的自定义数据类型,通常在使用结构体时,我们会进行单一的结构体初始化。但在使用同一个结构体,初始化不同的数据时,则可以用到结构体数组来进行初始化。 结构体数组是指在一个数组中存储多个结构体对象的集合。结构体是一

    2024年02月04日
    浏览(53)
  • C++:初始化列表,static成员,友元,内部类

    个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C++》 本篇博客作为C++:初始化列表,static成员,友元,内部类的知识总结。 初始化列表:以冒号开始,接着是一个以逗号分隔的数据成员列表,每个“成员变量”后面跟一个放在括号中的初始值或表达式。 初始化

    2024年02月07日
    浏览(56)
  • 【C++】构造函数和初始化列表的性能差距

    构造函数和初始化列表的性能差距对比测试 在C++类和对象中,你可能听到过更加推荐用初始化列表来初始化类内成员。如果类内成员是自定义类型,则只能在初始化列表中调用自定义类型的构造函数。 但初始化列表和在构造函数体内直接赋值有无性能差距呢?今天就用一份

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包