使用C中的两个字符串初始化const char * const *

时间:2013-12-06 12:07:43

标签: c pointers char initialization const

是否有人知道使用两个文字字符串(const char * const *"abcdefg")初始化"hijklmnop"的正确方法?我读到很难/不可能从char **转换,但我可能错了。

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:10)

而不是指针指针,使用指针数组并像这样初始化它们:

const char * const strs[] = {"abcdefg", "hijklmnop"};

因此,不是指向字符串常量的常量指针,而是现在有一个常量数组到字符串常量。 C不允许使用大括号初始化指针(除非它们中只有一个值),但它允许以这种方式初始化数组。

答案 1 :(得分:0)

在C99及以上版本中,您可以使用复合文字来创建数组,并将其用作指针的初始化器。

const char * const *p = (const char *[]){"abcdefg", "hijklmnop"};

这相当于使用Kninnug的答案中的命名数组,加上一个带有初始化器的指针,该初始化器按名称指向数组:

const char * const strs[] = {"abcdefg", "hijklmnop"};
const char * const *p = strs;

除了数组中有一个名称(strs)并且另一个是匿名的事实。

并且我还要补充一点,这些解决方案都不涉及将char **转换为const char * const *。构造它们的方式,每个char *由于被用作单独为const char *的数组元素的初始值设定项而单独转换为const char *。代码中没有char **个。