📜  C中的char s []和char * s有什么区别?(1)

📅  最后修改于: 2023-12-03 15:00:11.400000             🧑  作者: Mango

C中的char s []和char * s有什么区别?

在C语言中,字符串常常被表示为一个字符数组。但是这个字符数组有两种不同的表示方法:char s []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表示一个字符指针,指向一个字符串。例如:

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更加常用。