为什么不起作用?是否可以进行一些创造性的转换才能使它起作用?

1: const char* yo1 = "abc";
2: const char* yo2 = { 'a', 'b', 'c', '\0' }; // <-- why can't i do this?
3: printf("%s %s\n", yo1, yo2);

结果:段错误

第2行没有按照我的预期去做。

最佳答案

你可以做:

const char* yo2 = (char [4]) { 'a', 'b', 'c', '\0' };

这是有效的,并且可以实现您想要的。请注意,它不等同于:
const char* yo2 = "abc":

在前一种情况下,当在文件范围内声明yo2时:复合文字数组具有静态存储持续时间,但是当在块范围内声明yo2时,复合文字具有自动存储持续时间。

在后一种情况下,"abc"是字符串文字,并且具有静态存储持续时间(文件范围或块范围)。

您还可以使用数组而不是指针:
 const char yo2[] = { 'a', 'b', 'c', '\0' };

关于你的例子。在C中:
const char* yo2 = { 'a', 'b', 'c', '\0' };

无效,并且您的编译器将其解释为:
const char* yo2 = (char *) 'a';
'a'的值不是指针值(地址),因此取消引用yo2会调用未定义的行为。

10-07 20:29