数组作函数参数
数组元素作函数的参数
可以采用传递普通变量一样的方式
以单个元素的方式实现数组元素的传递
"复制数据的方法"
由于形参是在函数定义时定义,并无具体的值,因此数组元素只能在函数调用时,作函数的实参
当用数组中的元素作函数的实参时
必须在主调函数内定义数组,并赋值
实参与形参之间是"值传递"的方式
函数调用之前数组已有初值
调用函数时,将该数组元素的值传递给对应的形参
两者的类型应当相同
例:求一堆数组a[4]的所有元素之和
数组元素作实参
float sumall(float a, float b,float c,float d,);
{return(a+b+c+d);}
main()
{float sum;
static floata[4]={1,2,3,4};
sum=sumall(a[0], a[1], [2], a[3]);
printf("sum=%f\n",sum);
}
数组名作函数的参数必须遵循以下原则
参数形式:
如果形参是数组名,则实参必须是实际的数组名
如果实参是数组名,则形参可以是同样维数的数组名或指针
数组定义:
要在修调函数和被调函数中分别定义数组
类型:
实参数组和形参数组必须类型相同
行参数组可以不指明长度
提示!!!!!
C语言允许将整个数组作为函数的参数进行传递
数组名代表了该数组在内存中的首地址
采用的是按址传递方式
调用方式:
只需将数组名作为参数直接调用函数即可,无须使用下标
实参数组名将该数组的起始地址传递给形参数组
,两个数组共享一段内存单元
编译系统不再为形参数组分配存储单元,实际上这种数组的传递是采用指针实现的!
分析程序的执行过程
#include
printf(char str[])
{
printf("%s",str);
}
main()
{
char string[20]="C Programming";
print(string);/*数组名作函数的实参*/
调用时,实参数组将首地址string赋值给形参数组str
两个数组共同占用相同的内存单元,共享数组中的数据
string[0]与[0]代表同一个元素
形参数组的长度与实参数组的长度可以不相同
形参数组可以不指明长度
问题:形参数组长度与实参数组等长时会出现什么?
提示!!!
传递给函数的数组参数是不带()括号的数组名
在数组传递给函数时,为了使函数能够处理指定个数的数组元素,通常将数组的大小同时传递给函数
将数组传递被调函数,意味着被调用函数能够修改原始数组的元素的值
因为传递了数组名(数组的起始地址),所以被调函数能够准确地知道该数组的存储位置
被调函数在函数体中修改数组元素时就是在修改实际的数组元素
按址方式传递数组对提高性能是有意义的
如果采用传值的方式传递数组就会传递每一个元素的值拷贝
对于频繁传递的大型数组,对数组进行拷贝会消耗一定的时间和占用大量的存储空间
传递整个数组和传递一个数组元素之间的差别
#include
#define SIZE 5
void modifyarray(int[ ],int);
void modifyelemen(int);
main()
{int a[SIZE]={0,1,2,3,4};
int i;
pritnf("\nTne values of the original array are:\n");
for(i=0;i<=SIZE-1;i++)
printf("%/3d",a[i];
printf("\n");
modifyarray(a ,SIZE); /*以传址方式传递数组a*/
pritntf("The values os the modified array are:\n");
for(i=0;i<=SIZE-1;i++)
printf("%3d",a[i];
printf("\nThe values of a[3]is%3d\n",a[3]);
modifyelement(a[3];
printf("The values of a[3]is %3d\n",a[3];
}
void modifyarray(int b[ ],int size)
{ int j;
for(j=0;j<=size-1;j++)
b[j]*=2; }
void modifyelement(int x)
{printf("velue in modifyelement is %3d\n",x*=2);
}#计算机 #编程语言
评论: