一.类型
1.数组元素作为函数参数:
由于数组元素就是带下标的变量,与普通变量无区别,所以将其作为函数实参本质上与变量是完全相同的。但进行函数调用的时候,将作为实参的数组元素的值传送给形参。
如下:设计一个函数,判别一个整形数组中各元素的值,若大于0输出该值,如果小于等于0,则输出0值。
#include <stdio.h>
void nzp(int x)//此处设计的函数是不需要返回类型的,在形参部分使用整形变量x代指数组中的元素。
{
if(x > 0)
printf("% d",x);
else
printf("% d",0);
}
int main()
{
int a[5] , i;
printf("input 5 numbers\n");
for(i = 0;i < 5;i++)
{
scanf_s("%d",&a[i]);
nzp(a[i]);//此处就代表将数组的元素作为一个实参
}
return 0;
}
2.数组名作为函数参数
(1)数组名称作为函数参数的时候,必须要求形参和对应的实参数组是相同类型的数组。具体如下
void hanshu (int arr[]) //在此处形参必须标明该数组的类型为int
{
}
int main()
{
int arr[5] ;
hanshu(arr); //此处即为数组名称作为函数参数
}
(2)我们都知道,之前所提及的形参,无论是普通的变量还是数组的元素。它们都需要在内存中占有一定的空间。但是当数组名称作为函数参数时,所使用的形参数组实际上是不存在的,所以也就不占有空间。这是因为数组名称作为函数参数的时候实际上就是数组首元素的地址,所以在传参的时候实际上是地址的传送。
所以我们在使用整个数组作为函数参数时形参有两种写法:一.数组形式,二.指针形式。(本质上是一样的,就是指针所指向的数组地址)具体如下
#include <stdio.h>
void nzp(int a[])//此处即为数组的形参写法
{
//再写执行体函数具体的语句即可
}
int main()
{
int a[5] , i;
printf("input 5 numbers\n");
for(i = 0;i < 5;i++)
{
scanf_s("%d",&a[i]);
nzp(a);//此处就代表将数组名称作为一个实参
}
return 0;
}
//对于该函数还可以写为如下形式
#include <stdio.h>
void nzp(int* a)//此处即为指针的形参写法
{
//再写执行体函数具体的语句即可
}
int main()
{
int a[5] , i;
printf("input 5 numbers\n");
for(i = 0;i < 5;i++)
{
scanf_s("%d",a);
nzp(&a[0]);
}
return 0;
}
3.练习:根据上述知识,如何使用函数来实现冒泡排序呢?(具体请看之后的文章)