推荐答案
在C语言中,字符串可以通过字符数组或字符指针来声明和初始化。以下是两种常见的方式:
1. 使用字符数组
char str[] = "Hello, World!";
这种方式会在内存中分配足够的空间来存储字符串,并自动在末尾添加空字符 \0
。
2. 使用字符指针
char *str = "Hello, World!";
这种方式将字符串常量存储在只读内存中,并将指针 str
指向该字符串的首地址。
本题详细解读
1. 使用字符数组
声明与初始化:
char str[] = "Hello, World!";
- 这里
str
是一个字符数组,编译器会根据字符串的长度自动分配足够的空间,并在末尾添加\0
作为字符串的结束标志。 - 数组的大小为字符串长度加1(用于存储
\0
)。
- 这里
内存布局:
-- -------------------- ---- ------- ------ - --- ------ - --- ------ - --- ------ - --- ------ - --- ------ - --- ------ - - - ------ - --- ------ - --- ------ - --- ------- - --- ------- - --- ------- - --- ------- - ----
2. 使用字符指针
声明与初始化:
char *str = "Hello, World!";
- 这里
str
是一个指向字符的指针,指向存储在只读内存中的字符串常量。 - 字符串常量是不可修改的,尝试修改会导致未定义行为。
- 这里
内存布局:
- 字符串
"Hello, World!"
存储在只读内存区域,str
指向该字符串的首地址。 - 字符串末尾同样会自动添加
\0
。
- 字符串
3. 注意事项
- 字符数组:可以修改数组中的内容,因为数组是可写的。
- 字符指针:指向的字符串常量是不可修改的,修改会导致运行时错误。
4. 示例代码
-- -------------------- ---- ------- -------- --------- --- ------ - -- ------ ---- ------ - ------- -------- ------------- ------ ------ -- ------ ---- ----- - ------- -------- ------------- ------ ------ ------ -- -
5. 总结
- 字符数组适合需要修改字符串内容的场景。
- 字符指针适合指向不可修改的字符串常量。