【发布时间】:2013-12-23 18:45:45
【问题描述】:
有人知道用两个文字字符串("abcdefg" 和"hijklmnop")初始化const char * const * 的正确方法吗?我读到很难/不可能从char ** 转换,但我可能错了。
非常感谢任何帮助。
【问题讨论】:
-
所以你想要一个指向常量“字符串”的常量指针数组?
标签: c pointers char initialization constants
有人知道用两个文字字符串("abcdefg" 和"hijklmnop")初始化const char * const * 的正确方法吗?我读到很难/不可能从char ** 转换,但我可能错了。
非常感谢任何帮助。
【问题讨论】:
标签: c pointers char initialization constants
使用指针数组代替指针,并像这样初始化它们:
const char * const strs[] = {"abcdefg", "hijklmnop"};
因此,您现在有一个指向字符串常量的常量数组,而不是指向字符串常量的常量指针。 C 不允许使用大括号初始化指针(除非其中只有一个值),但它允许以这种方式初始化数组。
【讨论】:
在 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 **。
【讨论】: