来自《C语言概述》:
在大多数情况下,编译器会隐式地将数组类型的表达式(如数组的名称)转换为指向该数组第一个元素的指针。
只有在以下情况下,数组表达式才不会被转换为指针:
• 当数组是 sizeof 运算符的操作数时
• 当数组是 & 地址运算符的操作数时
• 当使用字符串字面值初始化 char、wchar_t、char16_t 或 char32_t 数组时
- 请您用一些正负例子解释最后一个条目的含义?我在书中没有找到最后一个条目的例子。
- 为什么只是字符型数组而不是其他类型的元素?
```c char str[] = "Hello"; // 使用字符串字面值初始化字符数组 ```
负例:
```c int arr[5] = {1, 2, 3, 4, 5}; // 不会被隐式地转换为指向 arr[0] 的指针 ```
2. 这是因为 C 语言中字符串实际上是以 null 结尾的字符数组。使用字符串字面值初始化字符数组时,编译器会自动在末尾添加一个 null 字符,以表示字符串的结束。因此,这种情况下将字符串字面值隐式转换为指向第一个字符的指针是很有用的。
char *str = "hello";
和char *str = {'h','e','l','l',o','\0'};
的区别。 - David Ranieristr
的类型是指向字符的指针类型,而不是数组类型。引用讨论了一个数组。 - Tim