推荐答案
在C语言中,字符串可以通过字符数组或字符指针来声明和初始化。以下是两种常见的方式:
1. 使用字符数组
char str[] = "Hello, World!";
这种方式会在内存中分配足够的空间来存储字符串,并自动在末尾添加空字符 \0。
2. 使用字符指针
char *str = "Hello, World!";
这种方式将字符串常量存储在只读内存中,并将指针 str 指向该字符串的首地址。
本题详细解读
1. 使用字符数组
声明与初始化:
char str[] = "Hello, World!";- 这里
str是一个字符数组,编译器会根据字符串的长度自动分配足够的空间,并在末尾添加\0作为字符串的结束标志。 - 数组的大小为字符串长度加1(用于存储
\0)。
- 这里
内存布局:
// www.javascriptcn.com code example str[0] = 'H' str[1] = 'e' str[2] = 'l' str[3] = 'l' str[4] = 'o' str[5] = ',' str[6] = ' ' str[7] = 'W' str[8] = 'o' str[9] = 'r' str[10] = 'l' str[11] = 'd' str[12] = '!' str[13] = '\0'
2. 使用字符指针
声明与初始化:
char *str = "Hello, World!";- 这里
str是一个指向字符的指针,指向存储在只读内存中的字符串常量。 - 字符串常量是不可修改的,尝试修改会导致未定义行为。
- 这里
内存布局:
- 字符串
"Hello, World!"存储在只读内存区域,str指向该字符串的首地址。 - 字符串末尾同样会自动添加
\0。
- 字符串
3. 注意事项
- 字符数组:可以修改数组中的内容,因为数组是可写的。
- 字符指针:指向的字符串常量是不可修改的,修改会导致运行时错误。
4. 示例代码
// www.javascriptcn.com code example
#include <stdio.h>
int main() {
// 使用字符数组
char str1[] = "Hello, World!";
printf("str1: %s\n", str1);
// 使用字符指针
char *str2 = "Hello, World!";
printf("str2: %s\n", str2);
return 0;
}5. 总结
- 字符数组适合需要修改字符串内容的场景。
- 字符指针适合指向不可修改的字符串常量。