为什么这段代码会输出初始化器中的第一个元素?
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" 等等。
我的一个朋友今天给我发了这个代码:
#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" 等等。