文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>第七章 函数

第七章 函数

时间:2010-06-03  来源:reesun

一、函数定义

类型
函数名 ( 形式参数 )
{
    代码块
}


二、函数声明 当编译器遇到一个函数的调用时,它产生代码传递参数并调用这个函数,而且接受该函数返回的值(如果函数有返回值的话)。      1、原型:   编译器如何知道函数信息的?   a、函数原型放在源文件的前面,编译器就会记住它的参数数量和类型,以及函数的返回值类型。这样编译器便可以检查函数的所有后续调用(在同一源文件中),确保它们是正确的。   b、使用“函数原型”。即,将函数原型至于一个单独的文件,当其它源文件需要这个函数的原型时,就好似用“#include”指令包含该文件。      使用函数原型的好处:    a、函数原型具有文件作用域,所以原型的一份拷贝可以作用域整个源文件。    b、函数原型只书写一次以避免多分原型的拷贝之间的不匹配。    c、如果函数定义的修改,我们只需要修改函数原型即可。    d、如果函数的原型同时也被“#include”指令包含到定义函数的文件中,编译器就可以确认函数原型与函 数定义的匹配。

三、函数的参数 C函数的所有参数均已“值传递”的方式进行传递,即函数将获得参数值的一份拷贝。当传递指针参数时,也是“值传递”,传递地址值。所有在函数中我们是根据传递的地址值对地址进行操作的。
可变参数列表: 在函数原型中,列出了函数期望接受的参数,但原型只能显示固定数目的参数,如何让一个函数在不同的时候接受不同数目的参数呢?

  stdarg宏:

可变参数列表时通过宏来实现的,这些宏定义在stdarg.h头文件中,他是标准库的一部分。这个头文件声明了一个类型va_list和三个宏 ——va_start、va_arg和va_end。
 
  先来个程序例子吧:

/**
Function:to calculate the average
Time:06/03/2010
**/

#include <stdarg.h>
float
average(int n_values, ...)
{
    va_list var_arg;
    int count;
    float sum = 0;

    /**
    to prepare the parameters which we will used
    **/

    va_start(var_arg, n_values);
    
    /**
    to get each parameters
    **/
    
    for(count = 0; count < n_values; count++){
        sum += va_arg(var_arg, int );
    }//end for

    
    /**
    to deal the parameters
    **/

    va_end(var_arg);
    
    return sum/n_values;
}


  程序解释:
  函数声明可以声明一个va_list类型的变量,变量名为 var_arg。通过调用va_start()来初始化,它的第1个参数是va_list变量名字,第2个参数是省略号前最后一个有名字的参数。
  为了访问参数,需要使用va_arg(),这个宏接受两个参数:va_list变量和参数列表中下一个参数的类型。
  最后,当访问完最后一个可变参数后,我们需要调用va_end()。

注:可变参数列表,仅支持可变参数的顺序访问。如果在顺序访问几个参数后中途终止是可以的,但是不能跳跃式的访问可变参数。


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载