yuchu3d 2022-03-04 10:18 采纳率: 81.5%
浏览 1796
已结题

C语言 结构体数组需不需要初始化? 怎样初始化为0或为空

关于 C语言中的 结构体数组,最近有一个疑问:

在学习数组的时候,要求在定义一个数组之后,最好初始化一下,为0 或者为空,以免后面出现意想不到的错误。

那么 对于 结构体数组呢 ? 是否 定义了之后 也最好需要初始化一下?

例如 定义一个存储了书名和价格的结构体 struct book { char book_name[30] ; float price; } , 然后定义 一个书名的结构体数组

struct book history_book[6];

对于 初次定义的这个 结构体 数组, 到底需不需要初始化?

怎样将 这个 结构体数组初始化为0 或者 为空?

谢谢!

  • 写回答

10条回答 默认 最新

  • madao1234 2022-03-04 13:14
    关注

    最好是做一下初始化
    如:struct book history_book[6] = {0};
    或者定义的时候不做初始化,在程序开始的地方对结构体数组做一下清空。
    如:
    struct book history_book[6] ;
    memset(&history_book, 0,sizeof(history_book));

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 溪山同色 2022-03-04 10:34
    关注

    我个人认为应该是需要的,比如
    struct student a[20] = {0};

    评论
  • 关注
    
    typedef struct { 
      char book_name[30] ; 
      float price; 
    } book_t;
    book history_book[6] = {0};
    //或者
    memset(&history_book, 0, 6*sizeof(book_t));
    
    
    评论
    1人已打赏
  • 一只蚂蝼 2022-03-04 10:38
    关注

    局部定义下面加一句这个就行

    memset(history_book,0,sizeof(history_book));
    
    
    评论 编辑记录
  • 封尘绝念丶 2022-03-04 11:58
    关注

    直接初始化为等于零就可以,调用的时候再进行赋值

    评论
  • 卡尔曼的BD SLAMer 计算机视觉领域新星创作者 2022-03-04 12:53
    关注

    我平常的编程习惯是:要初始化
    使用C语言特定语句进行初始化:memset 函数

    评论
  • _GX_ 2022-03-04 13:28
    关注

    你可以使用初始化列表对数组和结构体进行初始化,被省略的部分自动初始化为0。

    struct book
    {
        char book_name[30];
        float price;
    };
    struct book history_book[6] = {0};
    

    https://en.cppreference.com/w/c/language/initialization
    https://en.cppreference.com/w/c/language/array_initialization

    评论
  • wresource Android领域优质创作者 2022-03-04 23:06
    关注

    这个初始化也是可以的,一般也是建议进行初始化,但具体问题具体分析,初始化有时候可能不会导致未初始化带来的一下麻烦,但同时有时候一些奇奇怪怪的bug就是由于初始化导致的,所以成员是否初始化主要是方便编程方面实现而设置的,并不一定全初始化或者不初始化,这个选择是很灵活的

    评论
  • 工控匠 2022-03-05 07:23
    关注

    结构体实例化后需要进行对数组复制。

    评论
  • 黑与白818 2022-03-11 09:36
    关注

    最好做,不然里面的初始值就交给编译器了,一般情况下编译器会将初始值初始化为0,特殊情况呢,最好程序员自己保证。

    评论
查看更多回答(9条)

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月5日
  • 创建了问题 3月4日

悬赏问题

  • ¥15 复杂表达式求值程序里的函数优先级问题
  • ¥15 求密码学的客成社记ji着用
  • ¥35 POI导入树状结构excle
  • ¥15 初学者c语言题目解答
  • ¥15 div editable中的光标问题
  • ¥15 mysql报错1415Not allowed to return a result set from a trigger 不知如何修改
  • ¥60 Python输出Excel数据整理,算法较为复杂
  • ¥15 回答几个问题 关于数据库
  • ¥15 51单片机串口通信问题,未完成且要修改
  • ¥15 百鸡问题 c++编程问题(相关搜索:输出数据)