Chinaunix首页 | 论坛 | 博客
  • 博客访问: 995776
  • 博文数量: 186
  • 博客积分: 10020
  • 博客等级: 上将
  • 技术积分: 1676
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-14 17:08
文章存档

2011年(5)

2009年(11)

2008年(2)

2007年(111)

2006年(57)

我的朋友

分类: 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        s[i] = c;
    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语句显式声明,也可以通过上下文隐式声明

阅读(1649) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~