【发布时间】:2019-08-23 00:07:33
【问题描述】:
我正在阅读 K&R C 书的第 1.9 章,但我并不完全理解给出的示例代码。其中有一个函数getline(line, MAXLINE),它返回一个行长的int。
然而,紧接着,'line' 变量被使用。根据我对函数的理解,不应修改 line 变量,C 只是将line 和MAXLINE 传递给函数,函数返回一行的长度。这看起来像一个传递引用函数,但代码是传递值函数。
任何帮助将不胜感激。
我删除了 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] = '\0';
return i;
}
【问题讨论】:
-
代码通过值传递一个指针(使用不直观的语法),然后你可以使用这个指针来修改数组。本书将在某个阶段对此进行解释
-
数组在传递给函数时衰减为指针——指向第一个元素的指针被传递给函数。
-
最简洁的表达方式是注意指针的值是一个引用