首页>计算机>软件水平考试>复习指导>正文
高级语言程序设计知识点 六

www.zige365.com 2010-7-28 10:46:12 点击:发送给好友 和学友门交流一下 收藏到我的会员中心

    6.4   函数调用中的数据传递方式

    函数调用时,调用处与被调用函数之间会有数据传递发生。在C程序中,函数调用的数据传递方式有四种:实际参数的数据值传递给形式参数(值传递方式)、实际参数的指针值传递给形式参数(地址传递方式)、函数以返回值传递给调用环境(返回值方式)、调用环境与被调用函数共用全局变量(全局变量传递方式)。在地址传递方式中,实际参数可以是传递一般变量的指针、数组某元素的指针、字符串某字符指针等。
    1.实际参数向形式参数传递非指针数据
       调用带形式参数的函数时,调用处将实际参数的值传递给被调用函数的形式参数。在此要特别说明以下几点:
( l)函数调用时实际参数为对应的形式参数提供初值,实际参数表达式的值是在执行函数体之前计算的,函数调用中的实际参数可以是常量、变量或是一般的表达式。
 (2)C语言规定,实际参数表达式对形式参数的数据传递是“值传递”的,是单向传递。如实际参数也是变量,则实际参数变量与形式参数是不同的变量,实际参数变量的值传给形式参数,而不能由形式参数直接传回给实际参数。在函数执行过程中,形式参数变量的值可能被改变,但这改变对原先与它对应的实际参数变量没有影响。
    2.实际参数向形式参数传递指针
        实际参数向形式参数传递变量的指针
        函数可以设置指针类型的形式参数,调用带指针类型形式参数的函数时,对应指针形式参数的实际参数必须是相同类型的指针(如胡同类型的某变量的指针),指针形式参数变量从实际参数处得到某变量的指针。指针形式参数对于函数来说有特别的作用,它使函数得到了调用环境中某变量的地址,函数就可用这个地址间接访问函数之外的变量。因此,指针类型形式参数为函数改变调用环境中的数据对象提供了手段。
      如希望函数能通过形式参数改变任意指定变量的值,需要在三个方面协调一致:
(1)首先,函数应设置指针类型的形式参数;
(2)其次,函数体必须通过指针形式参数间接访问变量,或引用其值或修改其值;
(3)最后,调用函数时,要以欲改变值的变量的指针为实际参数调用函数。
       实际参数向形式参数传递数组元素的指针
       为了能使函数处理不同的成组变量,应向形式参数传递数组元素的指针,最通常的情况是数组首元素的指针。由于数组名能代表数组首元素的指针,所以常用数组名实际参数给形式参数传递数组首元素的指针。例如,用于求数组前n个元素和的函数sun(),这个函数被正确地设置有两个形式参数:一个形式参数是数组元素的指针;另一个整型的形式参数用于指定求和数组的元素个数。

【例6.2】求数组元素和的函数。
   int sum( int *a, int n) 
   { int i, s;
   for(s=i=0; i< n; i++)
   s+=a[i];
   return s;
   }
利用函数sum(),如有以下变量定义:
   int x[]= {1, 2, 3, 4, 5 }, i, j;
则语句
   i=sum(x,5); j=sum(&x[2],3);
   printf("i=%d\n j=%d\n", i,j);
将输出:
   i=15 
   j= 12

    函数调用sum(x,5)将数组x的首元素地址(&x[0])传送给形式参数a;函数调用sum(&x[2], 3)将数组x的元素x[2]的地址(&x[2])传送给形式参数a,而x[2]的地址就是数组元素段x[2]、x[3]、x[4] 的开始地址。

本新闻共5页,当前在第3页  1  2  3  4  5  

我要投稿 新闻来源: 编辑: 作者:
相关新闻
高级语言程序设计知识点 五
高级语言程序设计知识点 四
高级语言程序设计知识点 三
高级语言程序设计知识点 二