gpt4 book ai didi

c - 棘手的数组初始化

转载 作者:太空狗 更新时间:2023-10-29 16:09:01 26 4
gpt4 key购买 nike

在 C(不是 C++)中,我试图创建两个包含相同值的字符串表,但这些值以两种不同的方式排序。而且我不希望字符串在内存中重复。

基本上,我想做以下事情。除了根据 gcc,它失败是因为在第二个数组初始化中“初始化器元素不是常量”。有什么办法可以解决这个问题吗?最好不要说“哦,好吧,编译器应该优化它来做你想做的事”?

static const char * monthNames[] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};


/********
* Month table sorted for O(log N) string lookup
*/
static const char * monthSortedKeys[]= {
monthNames[3], /* Apr */
monthNames[7], /* Aug */
monthNames[11], /* Dec */
monthNames[1], /* Feb */
monthNames[0], /* Jan */
monthNames[6], /* Jul */
monthNames[5], /* Jun */
monthNames[2], /* Mar */
monthNames[4], /* May */
monthNames[10], /* Nov */
monthNames[9], /* Oct */
monthNames[8] /* Sep */
};

说明:我知道如何使用循环来完成此操作。我试图弄清楚如何在编译时做到这一点。

另一个更新:我只是将其编译为 C++ (g++),它可以运行。但同样,我正在寻找 C 答案。

最佳答案

示例代码片段:

static const char
JAN[] = "Jan",
FEB[] = "Feb",
// ...
DEC[] = "Dec";

static const char *const monthNames[] = {
JAN, FEB, /* ... */ DEC
};

static const char *const monthSortedKeys[]= {
/* APR, ... */ DEC, /* ... */ FEB, JAN /* ... SEP */
};

关于c - 棘手的数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8100470/

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