husky66
2019-09-26 20:58
采纳率: 72.2%
浏览 1.9k

C语言关于结构体必须要初始化吗?

#include<stdio.h>
#include<stdlib.h>

struct stu
{
    int a;
    char b;
    float c;
    char arr[10];
};

int main(void)
{
    struct stu  st;
    //memset(st, 0, sizeof(st));
    printf("%d\n", st.a);

    return 0;
}

结构体必须要初始化吗?在声明完一个结构体变量后,不是已经在内存中申请了空间了吗,为啥不能够直接输出st.a必须要初始化,虽然不初始化里面的内容
不确定。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • JonathanYan 2019-09-27 00:05
    已采纳

    可以不初始化,不初始化输出的就是随机值,即申请这段内存时存储的值。
    如果你学过c或者c++就会知道变量不赋初值会带来很严重的问题或者bug。
    很多条条框框的东西存在即是为了不让你费时间去思考不这样做会不会有问题,因为这都是前辈踩出来的坑或者血的教训,如果你非要思考这种问题,等到后面学进程锁、线程安全概念后有一堆原理等着你去剖析,一般这种问题按照规范去做就没事了。
    java中基本类型的的变量会在声明的时候进行初始化,但是坚持自己代码初始化还是一个好习惯。

    已采纳该答案
    评论
    解决 1 无用
    打赏 举报
  • threenewbee 2019-09-27 00:34

    结构体虽然分配了空间,但是里面的成员的值是随机的,特别是如果里面有指针的话,如果不初始化而直接访问,则会造成读取非法的内存地址的错误。

    学校里面的学生和专业程序员的区别在于,前者无知因此无畏。你要知道,开发程序中编写初始的代码花费1小时,那么维护这个代码需要3小时,调试代码排除错误需要花6小时。当你维护和调试不规范的代码而花费大量的时间精力的时候,你自然就明白预防性编程,也就是用规范编写代码来杜绝错误隐患,比起少写那么一行代码,有价值得多。

    评论
    解决 6 无用
    打赏 举报
  • z_open 2019-09-26 22:35

    不赋值就没有值呀
    就比如int a;printf("%d\n", a);

    评论
    解决 无用 1
    打赏 举报

相关推荐 更多相似问题