分类: LINUX
2007-01-23 10:46:41
在C语言中,所有函数参数都是"通过值"传递的。也就是说,传递给被调用函数的参数值存放在临时变量中,而不是存放
在原来的变量中。在被调用函数中,参数可以看作是便于初始化的局部变量,因此额外使用的变量更少,这样程序可以更
紧凑简洁。
必要时,也可以让函数能够修改主调函数中的变量。调用者需要向被调用函数提供待设置值的变量的地址(从技术角度看,
地址就是指向变量的指针),而被调用函数则需要将对应的参数声明为指针类型,并通过它间接访问变量。
如果是数组参数,情况就有所不同了。当把数组名用作参数时,传递给函数的值是数组起始元素的位置或地址----它并不
复制数组元素本身。在被调用函数中,可以通过数组下标访问或修改数组元素的值。
int power(int base,int n)
{
int p;
for (p = 1; n > 0; --n )
p = p * base;
return p;
}
#include
#define MAXLINE 1000
int getline(char line[], int maxline);
int 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;
}
int getline(char s[], int lim)
{
int c,i;
for ( i=0; i
if (c == '\n'){
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
int copy(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\n')
++i;
}
函数中的每个局部变量只在函数被调用时存在,在函数执行完毕退出时消失(但static存储类除外,这种类型的局部变量在多次函数调用之间保存值不变),函数间可以通过外部变量交换数据,而不必使用参数表。再者,外部变量在程序执行期间一直存在,而不是在函数调用时产生,在函数执行完毕时消失。
外部变量必须定义在所有函数之外,且只能定义一次,定义后编译程序将为它分配存储单元。在每个需要访问外部变量的函数中,必须声明相应的外部变量,此时说明其类型。声明时可以用extern语句显式声明,也可以通过上下文隐式声明