C语言中char *str[] 和char *str有什么区别
char str[] 和char str 的区别:C语言中char str和char str[]的区别-CSDN博客
char *str[]
和 char *str
在C语言中有不同的含义和用途,以下是它们的区别:
1. char *str
-
类型:这是一个指向字符的指针。
-
用途:通常用于指向一个字符串。字符串在C语言中是一个以空字符
'\0'
结尾的字符数组。 -
示例:
char *str = "Hello, World!";
在这个例子中,
str
是一个指向字符的指针,它指向字符串"Hello, World!"
的第一个字符。字符串"Hello, World!"
存储在程序的只读数据段中,str
保存了这个字符串的首地址。
2. char *str[]
-
类型:这是一个字符指针数组。
-
用途:通常用于存储多个字符串的指针。每个数组元素都是一个指向字符的指针,可以指向不同的字符串。
-
示例:
char *str[] = {"Hello", "World", "C", "Language"};
在这个例子中,
str
是一个字符指针数组,包含4个元素,每个元素都是一个指向字符的指针。这些指针分别指向字符串"Hello"
、"World"
、"C"
和"Language"
。
详细对比
特性 | char *str | char *str[] |
---|---|---|
类型 | 指向字符的指针 | 字符指针数组 |
用途 | 指向一个字符串 | 存储多个字符串的指针 |
初始化 | char *str = "Hello, World!"; | char *str[] = {"Hello", "World", "C", "Language"}; |
访问方式 | str[0] 访问第一个字符 | str[0] 访问第一个字符串的指针,str[0][0] 访问第一个字符串的第一个字符 |
内存布局 | 一个指针变量,指向字符串的首地址 | 一个数组,每个元素是一个指针,指向不同的字符串 |
修改内容 | 可以通过指针修改字符串内容(如果是可修改的字符串) | 可以通过指针修改每个字符串的内容(如果是可修改的字符串) |
示例代码
使用 char *str
#include <stdio.h>
int main() {
char *str = "Hello, World!";
printf("%s\n", str); // 输出: Hello, World!
// 修改指针指向另一个字符串
str = "Hello, C!";
printf("%s\n", str); // 输出: Hello, C!
return 0;
}
使用 char *str[]
#include <stdio.h>
int main() {
char *str[] = {"Hello", "World", "C", "Language"};
int n = sizeof(str) / sizeof(str[0]); // 获取数组的元素个数
for (int i = 0; i < n; i++) {
printf("%s\n", str[i]); // 逐个输出字符串
}
// 修改数组中的指针指向另一个字符串
str[0] = "Hi";
printf("%s\n", str[0]); // 输出: Hi
return 0;
}
输出
Hello
World
C
Language
Hi
总结
-
char *str
是一个指向字符的指针,通常用于指向一个字符串。 -
char *str[]
是一个字符指针数组,用于存储多个字符串的指针。 -
选择使用哪种类型取决于具体需求,如果只需要一个字符串,使用
char *str
;如果需要多个字符串,使用char *str[]
。