16道嵌入式C语言面试题

C语言函数的调用与参数

jouyouyun posted @ 2013年7月10日 21:41 in C/C++ with tags c 参数 调用 argument , 1002 阅读

形式参数与实际参数

    如果一个函数要使用参数,它就必须定义接受参数值的变量。
    函数定义时填入的参数我们称之为形式参数,简称形参,它们同函数内部的局部变量作用相同。形参的定义是在函数名之后和函数开始的花括号之前。
    调用时填入的参数,我们称之为实际参数,简称实参。
    必须确认所定义的形参与调用函数的实际参数类型一致,同时还要保证在调用时形参与实参的个数出现的次序也要一一对应。如果不一致,将产生意料不到的结果。与许多其它高级语言不同,它总要做一些甚至你不希望的事情,几乎没有运行时错误检查,完全没有范围检测。作为程序员,必须小心行事以保证不发生错误,安全运行。


赋值调用与引用调用

    一般说来,有两种方法可以把参数传递给函数。第一种叫做“赋值调用”(call by value),这种方法是把参数的值复制到函数的形式参数中。这样,函数中的形式参数的任何变化不会影响到调用时所使用的变量。如下例:

#include<stdio.h>

void func(int a,int b) //定义形式参数
{
    a = 199;
    b = 299;
}

int main()
{
    int a = 0,b = 0; //声明变量并赋值

    printf("a = %d, b = %dn",a,b);
    func(a,&b);
    printf("a = %d, b = %dn",a,b);

    return 0;
}

输出:

a=0, b=0
a=0, b=0

    函数 func(int a,int b) 调用完后,就执行结束了,a,b 的值不变。


    把参数传递给函数的第二种方法是“引用调用”(call by reference)。这种方法是把参数的地址复制给形式参数,在函数中,这个地址用来访问调用中所使用的实际参数。这意味着,形式参数的变化会影响调用时所使用的那个变量(详细内容请参见后续章节)。
    除少数情况外,C语言使用赋值调用来传递参数。这意味着,一般不能改变调用时所用变量的值。请看下例。如把上例的函数 func(int a,int b),修改如下:

#include<stdio.h>
void func(int *a,int *b) //定义形式参数
{
    *a = 199;
    *b = 299;
}

输出:

a=0, b=0
a=199, b=299

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter