我刚刚开始使用C,并且正在跟随"The C Programming Language"。
在第一章中,我发现了一些对我来说很奇怪的东西(我在JS,Python,C#等高级代码中做了很多工作)。我所指的是这个片段读取输入,分析其长度,然后复制它,如果比以前更长:
#include <stdio.h>
#define MAXLINE 1000
int get_line(char line[], int limit);
void copy(char to[], char from[]);
int main () {
int len, max;
char line[MAXLINE], longest[MAXLINE];
max = 0;
while((len = get_line(line, MAXLINE)) > 0) { // <-- here
if (len > max) {
max = len;
copy (longest, line);
}
}
if (max > 0) {
printf("Longest string: %sLength: %d\n", longest, max);
}
return 0;
}
int get_line(char line[], int limit) {
int current, index;
for (index = 0; index < limit -1 && (current = getchar()) != EOF && current != '\n'; ++index)
line[index] = current;
if (current == '\n') {
line[index] = current;
++index;
}
line[index] = '\0';
return index;
}
void copy (char to[], char from[]) {
int index = 0;
while ((to[index] = from[index]) != '\0')
++index;
}
这个片段中的奇怪之处是函数调用get_line
和copy
中的参数似乎是引用(即使它们不是指针?)。
例如,line
和longest
在main
中的值与辅助函数中的值相同,即使main
缺少任何扫描程序,并且没有任何辅助函数返回字符数组。