c - 如何创建 const 结构数组

标签 c arrays struct

我希望能够轻松地创建具有特定信息的 const 结构,因此决定“一次一行”声明和初始化它们,这样我就可以根据需要简单地添加新的 const 结构。这工作得很好,但是我如何创建某种数组来访问每个 const 结构呢?我尝试了以下方法,但不起作用。

typedef struct
{
    int numOfNotes;
    char *arpName;
    double freqRatios[12];
} ARPINFO;

const ARPINFO majorArp = {3,"Major Arpeggio",{0.0,JUST_MAJ_3,JUST_PERF_5}};
const ARPINFO minorArp = {3,"Minor Arpeggio",{0.0,JUST_MIN_3,JUST_PERF_5}};

const ARPINFO arpInfoArray[2] = {majorArp,minorArp}; // ERROR HERE

如果我可以使用这种方式组织结构,那么每次创建新的 const 结构时,我只需更改数组的大小并将新的 const 结构添加到数组中即可。

还是我偏离了轨道?枚举或宏可以帮助我吗?

编辑:freqRatios 是用宏定义的,我知道最初的 0.0 可能是多余的......

最佳答案

具有静态存储持续时间的变量必须具有 C 语言中的编译时常量初始值设定项。另一个变量不算作编译时常量(即使该变量是 const)。

你可以这样写:

#define MAJOR_ARP {3,"Major Arpeggio",{0.0,JUST_MAJ_3,JUST_PERF_5}}
#define MINOR_ARP {3,"Minor Arpeggio",{0.0,JUST_MIN_3,JUST_PERF_5}}

const ARPINFO majorArp = MAJOR_ARP;
const ARPINFO minorArp = MINOR_ARP;

const ARPINFO arpInfoArray[2] = { MAJOR_ARP, MINOR_ARP };

请注意,这有您的数据的两个副本。如果您同意拥有一份数据副本和引用它的其他静态变量,您可以这样做:

const ARPINFO *const arpInfos[2] = { &majorArp, &minorArp };

关于c - 如何创建 const 结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56118330/

相关文章:

c - 为什么我们必须在同一台机器上为不同的操作系统重新编译 c 源代码?

c - 在 C 中求幂和除数非常大的模数

c - 如何将音频帧从输入 .mp4 传递到 libavcodec 中的输出 .mp4?

c - 从 'char *' 分配到 'int' 的指针转换不兼容的整数

javascript - 将 JSON trim 为给定目标并获取所有父键

c - 套接字系列函数如何处理不同类型的结构?

javascript - PHP 数组转换为 JavaScript 数组

javascript - 如何使用输入字段名称 ="array[]"jQuery ajax?

c - C 结构声明中的数组

ios - 将 NSUserDefaults 与结构类型的数组一起使用