char s[] = {"ABC"}是否合法?一维字符数组为何可如此赋值?
字符数组初始化的两个问题解答
1. char s[] = {"ABC"}; 是否合法?
完全合法,这是符合C语言语法的数组初始化写法。
2. 为何一维字符数组能用{"hello"}形式赋值?
这不是什么“二维数组的方式”,只是C语言数组初始化的标准语法:
- 字符串字面量(比如
"hello")本身就是一个以\0结尾的char数组。在初始化一维字符数组时,C语言允许把字符串字面量放在初始化列表的{}中,这和直接写char s[] = "hello";是等价的——{}在这里只是初始化列表的语法标记,和二维数组没有关系。 - 更直观的等价写法:
char s[] = {"hello"};等同于char s[] = {'h','e','l','l','o','\0'};,编译器会自动把字符串的每个字符(包括末尾的结束符\0)依次填充到数组里,所以你提供的代码能正常编译运行,并且正确输出字符串。
附上你给出的可运行代码:
#include <stdio.h> int main(){ char s[] = {"hello"}; printf("%s", s); return 0; }
内容的提问来源于stack exchange,提问作者GongNanyue
相关产品推荐
相关产品推荐

