按值调用时按引用行为调用
Call by reference behavior when calling by value
我正在阅读 K&R C 书的第 1.9 章,但我没有完全理解给出的示例代码。其中,有一个函数 getline(line, MAXLINE)
是 returns 一行长度的整数。
但是,紧接着,使用了 'line'
变量。根据我对函数的理解,不应修改 line 变量,C
只是将 line
和 MAXLINE
传递给函数,而函数 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
);
我正在阅读 K&R C 书的第 1.9 章,但我没有完全理解给出的示例代码。其中,有一个函数 getline(line, MAXLINE)
是 returns 一行长度的整数。
但是,紧接着,使用了 'line'
变量。根据我对函数的理解,不应修改 line 变量,C
只是将 line
和 MAXLINE
传递给函数,而函数 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
);