【c语言函数参数处理方式 c语言函数参数是什么意思】本程序首先定义了一个实型函数aver , 有一个形参为实型数组a,长度为5 。在函数aver中,把各元素值相加求出平均值,返回给主函数 。主函数main 中首先完成数组sco的输入,然后以sco作为实参调用aver函数,函数返回值送av,最后输出av值 。从运行情况可以看出 , 程序实现了所要求的功能 。
3) 前面已经讨论过,在变量作函数参数时 , 所进行的值传送是单向的 。即只能从实参传向形参,不能从形参传回实参 。形参的初值和实参相同,而形参的值发生改变后,实参并不变化,两者的终值是不同的 。而当用数组名作函数参数时,情况则不同 。由于实际上形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化 。当然这种情况不能理解为发生了“双向”的值传递 。但从实际情况来看,调用函数之后实参数组的值将由于形参数组值的变化而变化 。为了说明这种情况,把【例5.4】改为【例5.6】的形式 。
【例8-9】题目同【例8.7】 。改用数组名作函数参数 。#include stdio.hvoid nzp(int a[5]){int i;printf("\nvalues of array a are:\n");for(i=0;i5;i++){if(a[i]0) a[i]=0;printf("%d ",a[i]);}}int main(void){int b[5],i;printf("\ninput 5 numbers:\n");for(i=0;i5;i++)scanf("%d",b[i]);printf("initial values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);nzp(b);printf("\nlast values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);return 0;}
本程序中函数nzp的形参为整数组a,长度为5 。主函数中实参数组b也为整型,长度也为5 。在主函数中首先输入数组b的值,然后输出数组b的初始值 。然后以数组名b为实参调用nzp函数 。在nzp中,按要求把负值单元清0,并输出形参数组a的值 。返回主函数之后,再次输出数组b的值 。从运行结果可以看出,数组b的初值和终值是不同的,数组b的终值和数组a是相同的 。这说明实参形参为同一数组,它们的值同时得以改变 。
用数组名作为函数参数时还应注意以下几点:
①形参数组和实参数组的类型必须一致 , 否则将引起错误 。
②形参数组和实参数组的长度可以不相同 , 因为在调用时,只传送首地址而不检查形参数组的长度 。当形参数组的长度与实参数组不一致时,虽不至于出现语法错误(编译能通过),但程序执行结果将与实际不符,这是应予以注意的 。
【例8.10】如把例8.9修改如下:#include stdio.hvoid nzp(int a[8]){int i;printf("\nvalues of array aare:\n");for(i=0;i8;i++){if(a[i]0)a[i]=0;printf("%d ",a[i]);}}int main(void){int b[5],i;printf("\ninput 5 numbers:\n");for(i=0;i5;i++)scanf("%d",b[i]);printf("initial values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);nzp(b);printf("\nlast values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);return 0;}
本程序与【例8.9】程序比,nzp函数的形参数组长度改为8 , 函数体中,for语句的循环条件也改为i8 。因此,形参数组a和实参数组b的长度不一致 。编译能够通过 , 但从结果看 , 数组a的元素a[5]、a[6]、a[7]显然是无意义的 。
③在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素的个数 。例如,可以写为:
void nzp(int a[])
或写为
void nzp( int a[], int n )
其中形参数组a没有给出长度,而由n值动态地表示数组的长度 。n的值由主调函数的实参进行传送 。由此 , 【例8-10】又可改为【例8-11】的形式 。
【例8-11】复制纯文本新窗口
#include stdio.hvoid nzp(int a[],int n){int i;printf("\nvalues of array a are:\n");for(i=0;in;i++){if(a[i]0) a[i]=0;printf("%d ",a[i]);}}int main(void){int b[5],i;printf("\ninput 5 numbers:\n");for(i=0;i5;i++)scanf("%d",b[i]);printf("initial values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);nzp(b,5);printf("\nlast values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);return 0;}
推荐阅读
- 看门狗是单机游戏吗,看门狗是单机游戏吗知乎
- 拍摄视频选择什么档,拍视频用什么格式的视频比较好
- java基础完整代码,java 基础代码
- 主流浏览器对html5的兼容性,浏览器对html5的支持
- 金字塔java源代码 金字塔程序化编写
- 三星电视一直转圈怎么回事,三星电视机为什么一直闪
- phpcms内容编辑写html,phpcms模板制作教程
- 解谜冒险游戏缩写,解谜冒险游戏缩写是什么
- python的小写r函数 python 小写