【发布时间】:2016-04-19 21:46:24
【问题描述】:
我的一个朋友今天给我发了这个代码:
#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 *s而不是char *s[]吗? -
MSVC 说错误 C2078:初始化程序太多。所以代码无法输出
one -
初始化列表中的逗号不是逗号操作符。他们只是分隔字段。但是您可以通过将表达式括在括号中来获取逗号运算符:
char *s = { ("one", "two", "three") };(并且您会收到警告,左侧的 void 表达式没有任何效果。)
标签: c initialization initializer-list initializer