C程序,形式参数与实际参数的一个问题.

<<C程序设计语言.第二版>>书中的一个字符数组的问题.

这里我有点感到疑惑的是:getline函数的形式参数之一的s[],是怎样将值传递给在主函数中的实际参数line[]的? 不是说形参不能改变实参的么?望高手解答...
程序已经通过调试,可以实现预期的功能.

/* 读入一组文本行,并打印出长度最长的一行 */

#include <stdio.h>

#define MAXLINE 1000 /* 允许输入行的最大长度 */

int getline(char line[], int maxline);
void copy(char to[], char from[]);

/* 打印最长的输入行 */
main()
{
int len; /* 当前行长度 */
int max; /* 当前为止发现最长行的长度 */
char line[MAXLINE]; /* 当前输入行 */
char longest[MAXLINE]; /* 最长行保存在这里 */
max = 0;
while ((len = getline(line, MAXLINE)) > 0)
if (len > max) {
max = len;
copy(longest, line); //最长行替换为当前输入行
}
if (max > 0) /* 存在这样的行 */
printf("%s", longest);
return 0;
}

/* getline函数: 将一行读入到S中并返回其长度 */
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'; //'\0'字符串的结束标志
//s[0] = '*';
return i; //返回当前行长度
}

/* copy: copy 'from' into 'to'; assume to is big enough */
/* copy函数:将from复制到to;假定to足够大 */
void copy(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}

第1个回答  2013-12-13
形参是你自己定义的,比如int a,float b,double c;
a,b,c在这里都是形参
实参是具体的的数值,但如果定义一个char name[10];
name在这里是形参,你可以把a,b,c赋给name。 a,b,c在这里就是实参了。
说简单点,形参就是可以用来赋值的。实参不可以追问

看你说的,反而还更糊涂了。。。
还是多谢回答,这个问题我已经搞清楚了,原因是数组参数比较特别,数组名相当于一个地址,也就是指针。

相似回答
大家正在搜