按值调用时按引用行为调用

Call by reference behavior when calling by value

我正在阅读 K&R C 书的第 1.9 章,但我没有完全理解给出的示例代码。其中,有一个函数 getline(line, MAXLINE) 是 returns 一行长度的整数。

但是,紧接着,使用了 'line' 变量。根据我对函数的理解,不应修改 line 变量,C 只是将 lineMAXLINE 传递给函数,而函数 returns 是一行的长度。这看起来像一个按引用传递函数,但代码是按值传递函数。

如有任何帮助,我们将不胜感激。

我剥离了 K&R 书中的大部分原始代码以试图更好地理解它,但它仍然让我感到困惑。

#define MAXLINE 1000
int getLine(char, int);

int main(){
    char line[MAXLINE];
    int len;

    printf("%s\n", line);         //making sure that there is nothing in line
    len = getline(line, MAXLINE); 
    printf("length: %d\n", len);  
    printf("%s", line);           //now there's something in line!?

    return 0;
}

int getline(char s[],int lim)
{
    int c, i;
    for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '[=10=]';
    return i;
}

int getline(char s[], int lim) 等价于 int getline(char *s, int lim).

意思就是s是一个指针,指向char line[MAXLINE]在内存中存放的位置,所以通过修改s的内容,其实就是修改 main.

中声明的线数组

此外,您在问题中的代码中存在一个小错误。我认为前向声明 int getLine(char, int); 应该是 int getline(char[], int); (注意 [] 和小写的 l);