📅  最后修改于: 2023-12-03 15:00:11.400000             🧑  作者: Mango
在C语言中,字符串常常被表示为一个字符数组。但是这个字符数组有两种不同的表示方法:char s []
和char * s
,它们之间有一些不同之处。本文将详细介绍它们之间的区别。
char s []
表示一个字符数组,数组的大小是在初始化时确定的。例如:
char s[] = "hello";
在这个例子中,s
是一个数组,它的大小是6(因为它必须包含字符串的结束符\0
)。
我们可以通过下标来访问这个字符数组中的每一个元素:
for(int i=0; s[i]!='\0'; i++) {
printf("%c", s[i]);
}
这里的s[i]
就是数组s
中的第i
个元素。
char * s
表示一个字符指针,指向一个字符串。例如:
char *s = "hello";
在这个例子中,s
是一个指针,它指向字符串常量"hello"在内存中的位置。
我们可以通过指针运算符*
来访问这个字符串中的每一个字符:
for(char *p=s; *p!='\0'; p++) {
printf("%c", *p);
}
这里的*p
就是指针p
所指向的地址中存储的字符。
char s[]
和char *s
之间最主要的区别是:char s[]
是一个数组,而char *s
是一个指针。
因为数组的大小是在定义时确定的,所以我们无法改变s
数组的大小。但是,我们可以通过指针来改变指向的字符串,例如:
char s1[] = "hello";
char s2[] = "world";
char *p = s1;
p = s2;
在这个例子中,我们用指针p
来指向了s2
数组中的字符串。
另外,char s[]
可以被用作函数参数,例如:
void f(char s[]) {
// ...
}
char s[] = "hello";
f(s);
在这里,我们定义了一个函数f
,它的参数是一个字符数组s
。我们向这个函数传递了数组s
。在函数中,我们可以使用数组s
中的元素。
但是,char *s
也可以被用作函数参数,并且更加常用。例如:
void f(char *s) {
// ...
}
char *s = "hello";
f(s);
在这个例子中,我们定义了一个函数f
,它的参数是一个字符指针s
。我们向这个函数传递了指针s
。在函数中,我们可以使用指针s
所指向的字符串。
char s[]
表示一个字符数组,大小在定义时确定,无法改变。char *s
表示一个指针,指向一个字符串,可以随时指向另一个字符串。char s[]
和char *s
都可以被用作函数参数,但是char *s
更加常用。