这个函数参数stringLength(char string [])与stringLength(char * string)之间有什么区别,不应该是第一个不允许增量(string = string +1)对下面的代码有注释?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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));
}
答案 0 :(得分:9)
这是因为s
是main
中的数组,但当您将其作为stringLength
中的参数传递时,它会衰减为指针< /强>
这意味着string
不是数组,它是一个指针,它包含s
的地址。编译器在不告诉您的情况下对其进行更改,因此它等同于将函数编写为:
int stringLength(char *string);
有一个page讨论C-Faq中的C数组和指针
从那里,我建议你阅读问题: