gpt4 book ai didi

c - 如何初始化指向结构的指针数组?

转载 作者:太空狗 更新时间:2023-10-29 16:33:34 25 4
gpt4 key购买 nike

是否可以初始化指向结构的指针数组?像这样的东西:

struct country_t *countries[] = {
{"United States of America", "America"},
{"England", "Europe"},
{"Ethiopia", "Africa"}
}

我想这样做是为了在不连续的内存中获取实体,并在连续的内存中获取指向它们的指针......但是我不能使用动态内存,所以我想知道没有它是否可行。

最佳答案

好吧,您的代码使用结构而不是指向结构的指针。有多种方法可以满足您的需求,包括:

static struct country_t us = { "United States of America", "America" };
static struct country_t uk = { "England", "Europe" };
static struct country_t et = { "Ethiopia", "Africa" };

struct country_t *countries[] = { &us, &uk, &et, };

在 C99 中,还有其他方法可以使用指定的初始值设定项和复合文字来实现。第 6.5.2.5 节“复合文字”展示了方法:

struct country_t *countries[] =
{
&(struct country_t) { "United States of America", "America" },
&(struct country_t) { "England", "Europe" },
&(struct country_t) { "Ethiopia", "Africa" },
};

该标准说明了指向具有函数调用的结构的指针。请注意,并非所有 C 编译器都接受 C99 语法,并且这些复合文字在 C89(也称为 C90)中不存在。

编辑:升级为使用 2 个字母的 ISO 3166 国家/地区代码。还将命名结构变成静态变量——这些符号之前在文件外不可见(因为它们不存在),现在它们在文件外也不可见。我争论过是否要将任何内容设为 const 并决定不这样做——但在可能的情况下使用 const 通常是个好主意。此外,在示例中,3 个大陆有 3 个国家/地区。如果您在一个大陆上有多个国家(规范),您可能希望能够共享大陆字符串。但是,您是否可以安全地(或完全)这样做取决于 struct country_t 的细节(未给出),以及是否允许程序更新表(返回常量问题)。

关于c - 如何初始化指向结构的指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/194828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com