有人知道用两个字面字符串("abcdefg"
和"hijklmnop"
)来初始化一个const char * const *
的正确方法吗?我读过从char **
转换比较困难/不可能,但我可能错了。
非常感谢任何帮助。
有人知道用两个字面字符串("abcdefg"
和"hijklmnop"
)来初始化一个const char * const *
的正确方法吗?我读过从char **
转换比较困难/不可能,但我可能错了。
非常感谢任何帮助。
不要使用指向指针的指针,而是使用指针数组并像这样初始化它们:
const char * const strs[] = {"abcdefg", "hijklmnop"};
因此,现在您拥有一个指向字符串常量的常量数组,而不是指向字符串常量的常量指针。C语言不允许使用大括号初始化指针(除非它们中只有一个值),但它允许以这种方式初始化数组。
const char * const *p = (const char *[]){"abcdefg", "hijklmnop"};
const char * const strs[] = {"abcdefg", "hijklmnop"};
const char * const *p = strs;
除了一个数组有名字(strs
)而另一个没有之外,两者的区别在于这一点。
还要补充一点,这些解决方案都不涉及将 char **
转换为 const char * const *
。由于它们的构造方式,每个 char *
都被转换为单独的 const char *
,因为它们被用作数组元素的初始化器,这些数组元素本身就是单独的 const char *
。代码中没有任何 char **
。