繁体   English   中英

棘手的数组初始化

[英]Tricky array Initialization

在C(NOT 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 */
};

这似乎对我有用:

static const char monthNames[][4] = ...

我原以为将指针声明为常量会有所帮助,但正如其他人所指出的那样,事实并非如此。

暂无
暂无

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

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