当我们声明一个字符数组(char array)或一个字符指针(char pointer)时,会用到char s[]和char *s两种写法。它们之间有以下区别:
- 内存分配方式不同
char s[]声明的是字符数组,也叫数组型字符串(array-style string)。它需要在定义的时候指定初始值,编译器会自动计算数组的大小,将内存分配到栈上,这个数组的大小是不能够改变的。
char *s声明的是字符指针,也叫指针型字符串(pointer-style string)。它不需要指定初始值,只是定义了一个指针变量s,内存分配在堆上,它的大小可以随时改变。
- 操作方式不同
由于数组是有序的,访问元素时可以使用下标操作符[]。对于字符数组s,可以通过s[i]这种方式访问数组中的第i个元素。但是,对于字符指针s,不能通过s[i]访问第i个字符,因为它只是一个指向字符串的指针。我们需要先使用解引用操作符*来获得指针所指的字符。
示例1:使用char s[]声明一个字符串,然后将它逐个传递给函数。示例中反映了char s[]的内存分配方式和数组特性。
void foo(char s[]) {
printf("%s\n", s);
}
int main() {
char s[] = "hello";
foo(s); // 输出:hello
return 0;
}
示例2:使用char s声明一个字符串,然后将它逐个传递给函数。示例中体现了char s的内存分配方式和指针特性。
void foo(char* s) {
printf("%s\n", s);
s++; // s自增1,使它指向字符串的下一个字符
printf("%s\n", s);
}
int main() {
char* s = "hello";
foo(s); // 输出:hello ollo
return 0;
}
以上是C中char s[]和char *s的区别。在实际开发中,需要根据具体情况对它们进行使用。一般来说,字符指针适用于不确定字符串长度的情况,而字符数组更适用于已知字符串长度的情况。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C中的char s[]和char *s有什么区别 - Python技术站