struct init

本文深入探讨了C语言中结构体初始化的各种方法,包括标准用法、C99扩展以及全零初始化技巧,并提供了实例代码进行演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设有一个如下的struct定义:

struct astruct

{

int a;

int b;

};

struct astruct test = {0};

即使astruct中都是基础类型的成员这样的初始化话也是不正确的。

这种初始化仅仅是把a变量设置为了0,而未对b变量做初始化。

产生这样错误的原因,大概是收到数组初始化的影响。数组是可以这么初始化话的,而且初始化的值只能是0!

对结构体的初始化,可以有一下三种。

struct test
{
    int a;
    int b;
};

int main()
{
    struct test t1 = {0, 0};

    struct test t2 = { 
        .a=2,

        .b=3
    }; 

    struct test t3 = { 
        a:12345,

        b:567890
    }; 

    printf("t1.a = %d, t1.b = %d\n", t1.a, t1.b);
    printf("t2.a = %d, t2.b = %d\n", t2.a, t2.b);
    printf("t3.a = %d, t3.b = %d\n", t3.a, t3.b);

    return 0;
}

 

第一种是C标准的用法,可移植性好,但是结构体类型复杂时,可读性很差;

第二,三种是C99 for gcc的扩展,非标准,可移植性较差;

另外,对于struct全零初始化时,可采用如下方式:

  1. memset(&st, 0, sizeof (st));  

  1. bzero(&set, sizeof (st));

   memset和bzero的主要区别是:参数个数不同;

   memset 需要三个参数,其中第二个参数是&st指向的内存中要初始化的值,而bzero使用0来初始化

转载于:https://my.oschina.net/u/218425/blog/60917

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值