为什么这段代码会输出初始化器中的第一个元素?

Why does this code output the first element in the initializer?

我的一个朋友今天给我发了这个代码:

#include <stdio.h>

int main()
{
    char *s = { "one", "two", "three", "four", "five" };
    puts(s);
}

它的输出是:

one

据我所知,像"one"这样的字符串在C中被翻译成地址,是常量。因此,由于其中的逗号运算符,"one", "two", "three", "four", "five" 等于 "five"。那么 { "one", "two", "three", "four", "five" } 不应该等于 { "five" },创建 char *s="five" 吗?

这段代码中没有逗号运算符。相反,逗号是初始化列表中的分隔符。

编译器会将 char 指针初始化为列表中的第一个文字,并发出类似 "excess elements in initializer" 的警告,表明列表中剩余的元素已被丢弃。

正如评论中已经提到的,您朋友的意图可能是

char *s[] = { "one", "two", "three", "four", "five" }

给出 s[0]="one"、s[1]="two" 等等。