为什么我可以在函数内而不是在main中增加char数组位置

这个函数参数stringLength(char string [])与stringLength(char * string)之间有什么区别,第一个不应该允许增量(string = string +1)对下面的代码有注释?

#include  #include  #include  int stringLength(char string[]) { int length = 0; while(*string) { string = string + 1; // I can do it here length++; } return length; } int main(void){ char s[] = "HOUSE"; s = s + 1; // I can not do it here printf("%s\n", s); printf("%d\n", stringLength(s)); } 

那是因为smain数组 ,但是当你将它作为stringLength的参数传递时,它会衰减为指针

这意味着string不是一个数组,它是一个指针,它包含s地址 。 编译器在不告诉你的情况下对其进行更改,因此它等同于将函数编写为:

 int stringLength(char *string); 

有一个页面讨论C-Faq中的C数组和指针

从那里,我建议你阅读问题:

  • 6.6为什么你可以在stringLength修改string
  • 6.7为什么你不能在main修改s
  • 6.2我听说char a[]char *a相同
  • 6.3 C中“指针和数组的等价”是什么意思?
  • 6.4为什么数组和指针声明可以作为函数forms参数互换?