husky66 2019-09-26 20:47 采纳率: 36.4%
浏览 1980
已采纳

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后不是已经分配空间了吗?
直接输出其中的st.a为什么不行,虽然其中的只不确定。

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-09-27 00:10
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵