繁体   English   中英

如何使用匿名数组初始化结构

[英]How to initialize struct with anonymous array

我正在尝试使用匿名数组初始化创建嵌套结构:

struct CIpv6Address {
    uint16_t* address;
};

struct CIpv6Cidr {
    CIpv6Address* address;
    uint16_t cidr;
};

CIpv6Cidr cIpv6Cidr1{
    CIpv6Address {
        (uint16_t[]){0xfdaa, 0, 0, 0, 0, 0, 0, 1};
    },
    64
};

但我得到:

错误:获取临时数组的地址 (uint16_t[]){0xfdaa, 0, 0, 0, 0, 0, 0, 1};

并且

错误:“{”令牌 CIpv6Address { 之前的预期主表达式

第一个错误我有点知道为什么。 但我不想用new分配一个数组,因为它需要在之后以某种方式delete 有没有一种简单的方法可以简单地在那里放一个小地址?

对于第二个错误,我不知道

这不是您在 C 中初始化变量的方式。 在 C 中,初始化的形式类似于type variable = value - 在变量名称和{之间必须有一个= 此外,如果不使用typedef ,您必须在名称前使用关键字struct

如何使用匿名数组初始化结构

您可以使用复合文字。 在文件 scope 复合文字具有 static 存储持续时间,但在块 scope 它们具有自动存储持续时间 - 与往常一样,您必须注意对象的生命周期。 您可以使用godbolt链接

#include <stdint.h>

struct CIpv6Address {
    uint16_t* address;
};

struct CIpv6Cidr {
    struct CIpv6Address* address;
    uint16_t cidr;
};

struct CIpv6Cidr cIpv6Cidr1 = {
    &(struct CIpv6Address){
        (uint16_t[]){0xfdaa, 0, 0, 0, 0, 0, 0, 1},
    },
    64
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM