zhumengyun 发表于 2014-11-7 15:54:41

结构体变量有没有默认初值

#include<stdio.h>
struct packed
{
        unsigned a:2;
        unsigned b:3;
        unsigned c:4;
        int i;
        char c1;
        double b1;
}data;
main()
{
       
        int a1;
        printf("%d\t",a1);214213826
        printf("%d\t",data.i);
        printf("%c\t",data.c1);
        printf("%f\t",data.b1);
        printf("%d\t",data.b);
        printf("%d",data.a );

}
如果是普通变量没有赋初值就要强行输出,系统编译时会提示,运行时给出一个无法预料的值,但是我定义了结构体,然后定义该结构体变量,但是同样也没有赋初值,而编译时不会有没有赋初值的提醒,运行时结构都是0,这是为什么呢,难道结构体变量没有赋初值时,系统有默认的初始值。

suxiang2014 发表于 2014-11-7 16:12:48

C规定,未初始化全局变量的初值为0,这个清0的操作是由启动代码完成的,还有已初始化变量的初值的设置,也是由启动代码完成的。
C规定,未初始化局部变量的初值为随机。

suxiang2014 发表于 2014-11-7 16:14:01

data是全局变量

zhumengyun 发表于 2014-11-7 16:15:53

我刚刚又发了个帖子,哪里结构体是局部变量,你看看为什么编译时不会有没初始化的提醒
页: [1]
查看完整版本: 结构体变量有没有默认初值