c语言函数参数处理方式 c语言函数参数是什么意思

c语言初学问题,正确处理传给函数参数为数组的方法int main()
{
int a[99],i,c;
int f(int c);
for(i=0;i99;i++)
a[i]=i+2;
for(i=0;i99;i++)
{c=a[i];
a[i]=f(c);//-------------
//a[i]=c;
}
for(i=0;i99;i++)
printf("a[%d]=%-5d",i,a[i]);
}
int f(int c)
{ int i;
for(i=2;ic;i++)
if(c%i==0)break;
if(i==c)
c=c;
else
c=0;
return c;
}
简答题,c语言中函数传递参数的方式有哪2种,含义是什么一:值传递 , 只是把一个变量的值复制到调用函数中去 。
二:引用传递,把变量的地址(即指针)传到调用的函数去,调用的函数对变量的地址进行的操作会改变参数的值 。
c语言中用函数做参数怎么用数组元素就是下标变量 , 它与普通变量并无区别 。因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时 , 把作为实参的数组元素的值传送给形参,实现单向的值传送 。【例5-4】说明了这种情况 。
【例8-7】判别一个整数数组中各元素的值,若大于0 则输出该值,若小于等于0则输出0值 。编程如下:#include stdio.hvoid nzp(int v){if(v0)printf("%d ",v);elseprintf("%d ",0);}int main(void){int a[5],i;printf("input 5 numbers\n");for(i=0;i5;i++){scanf("%d",a[i]);nzp(a[i]);}return 0;}
本程序中首先定义一个无返回值函数nzp , 并说明其形参v为整型变量 。在函数体中根据v值输出相应的结果 。在main函数中用一个for语句输入数组各元素 , 每输入一个就以该元素作实参调用一次nzp函数,即把a[i]的值传送给形参v,供nzp函数使用 。
数组名作为函数参数
用数组名作函数参数与用数组元素作实参有几点不同 。
1) 用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的 。因此,并不要求函数的形参也是下标变量 。换句话说,对数组元素的处理是按普通变量对待的 。用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明 。当形参和实参二者不一致时,即会发生错误 。
2) 在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元 。在函数调用时发生的值传送是把实参变量的值赋予形参变量 。在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素 。因为实际上形参数组并不存在,编译系统不为形参数组分配内存 。那么,数据的传送是如何实现的呢?在我们曾介绍过,数组名就是数组的首地址 。因此在数组名作函数参数时所进行的传送只是地址的传送,也就是说把实参数组的首地址赋予形参数组名 。形参数组名取得该首地址之后,也就等于有了实在的数组 。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间 。
上图说明了这种情形 。图中设a为实参数组,类型为整型 。a占有以2000为首地址的一块内存区 。b为形参数组名 。当发生函数调用时,进行地址传送,把实参数组a的首地址传送给形参数组名b , 于是b也取得该地址2000 。于是a,b两数组共同占有以2000为首地址的一段连续内存单元 。从图中还可以看出a和b下标相同的元素实际上也占相同的两个内存单元(整型数组每个元素占二字节) 。例如a[0]和b[0]都占用2000和2001单元,当然a[0]等于b[0] 。类推则有a[i]等于b[i] 。
【例8-8】数组a中存放了一个学生5门课程的成绩,求平均成绩 。#include stdio.hfloat aver(float a[5]){int i;float av,s=a[0];for(i=1;i5;i++)s=s+a[i];av=s/5;return av;}int main(void){float sco[5],av;int i;printf("\ninput 5 scores:\n");for(i=0;i5;i++)scanf("%f",sco[i]);av=aver(sco);printf("average score is %5.2f",av);return 0;}

推荐阅读