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

时间:2013-12-11 21:35:19

标签: c arrays pointers increment

这个函数参数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));
}

1 个答案:

答案 0 :(得分:9)

这是因为smain中的数组,但当您将其作为stringLength中的参数传递时,它会衰减为指针< /强>

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

int stringLength(char *string);

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

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

  • 6.6为什么您可以修改string
  • 中的stringLength
  • 6.7为什么你无法修改s
  • 中的main
  • 6.2我听说char a[]char *a
  • 相同
  • 6.3 C中`指针和数组'的等价意味着什么?
  • 6.4为什么数组和指针声明可以作为函数形式参数互换?