我希望能够轻松地创建具有特定信息的 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/