为什么我可以在函数内而不是在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)); }
那是因为s
是main
的数组 ,但是当你将它作为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参数互换?