c - C:找到最长的线
问题描述
这是 Dennis Ritchie 和 Brian Kernighan 所著的 The C Programming Language 一书(第二版)中的一个示例程序。我的问题是,如果我们传递的是值(变量行)而不是函数长度的引用,那么变化如何反映在主函数中?
#include <stdio.h>
#define MAXLINE 1000
int length(char s[], int lim);
void copy(char to[], char from[]);
int main() {
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while ((len = length(line, MAXLINE)) > 0) {
if (len > max) {
max = len;
copy(longest, line);
}
}
if (max > 0) {
printf("%s", longest);
}
return 0;
}
int length(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;
}
void copy(char to[], char from []) {
int i;
i = 0;
while ((to[i] = from[i]) != '\0') {
++i;
}
}
解决方案
这个定义:
int length(char s[], int lim)
可以改写为:
int length(char *s, int lim)
这可能更容易理解。我们不是按值传递变量,而是传递指针,因此函数可以访问数据并在必要时对其进行修改。
推荐阅读
- scrapy - 如何将scrapy合约与CloseSpider异常结合起来
- ios - 当用户更改 Picker 值时执行操作
- azure-functions - Azure 功能消耗计划中使用 Azure 应用配置的指南
- java - 获取 Spring WebClient 请求的状态码
- css - 悬停在TextField上时Material-ui显示指针光标
- report - 无法生成黄瓜 pdf 报告
- r - 如何从 R 中的列表中返回最小值和名称 var?
- vue.js - Capacitor 3 和 VueJS,打开保存的文件(或下载)
- python - Python & NetworkX - 如何检查节点是否自循环
- amazon-web-services - 如何创建 SNS 订阅过滤策略