prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 1.32

Q这些初始化有什么区别?

char a[] = "string literal";
char *p  = "string literal";
如果我尝试为p[i].


A字符串字面量(C 源代码中双引号字符串的正式名称)可以两种略有不同的方式使用。

  1. 作为 char 数组的初始化值,如char声明char a[]时,它指定了该数组中字符的初始值(以及,如有必要,其大小)。
  2. 在其他任何地方,它都会转换为一个匿名的、静态的字符数组,而这个匿名的数组可能存储在只读内存中,因此不一定可以修改。在表达式上下文中,数组会像往常一样立即转换为指针(参见第 6 节),因此第二个声明将p初始化为指向该匿名数组的第一个元素。

有些编译器有一个开关,用于控制字符串字面量是否可写(用于编译旧代码),有些编译器可能提供选项,将字符串字面量正式视为 const 数组(以获得更好的错误捕获)。const char(以获得更好的错误捕获)。

另请参阅问题 1.316.16.26.811.8b

参考:K&R2 第 5.5 节,第 104 页
ISO 第 6.1.4 节,第 6.5.7 节
Rationale 第 3.1.4 节
H&S 第 2.7.4 节,第 31-2 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管