易懂的数组作为函数参数(C语言)

易懂的数组作为函数参数(C语言)

1、数组做函数参数

(1)、若将一个数组作为实际参数传递给函数,只需不带方括号的数组名即可

若数组a的定义为:int a[10];
若要将数组a作为实参传递给被调用函数SumArr(),
则调用语句可写成:SumArr(a,10);

数组名代表数组首元素的地址,因此数组名做参数就可以将数组的起始地址传递给形参。另外需要将数组元素的个数也传递给被调用的函数。

函数SumArr()的函数原型如下:
int SumArr( int b[],int n )
//表示函数SumArr()期望用形参b来接收一个整型的数组,用形参n来接收数组元素的个数

程序1.1:调用函数SumArr()计算累加和

#include<stdio.h>
int SumArr(int arry[],int n);

int main()
{
     int a[5] = {1,4,5,7,9};
     //求数组a中前5个数的和
     printf("%d\n",SumArr(a,5));

     return 0;
}

int SumArr(int arry[],int n)
{
     int sum = 0;

     for(int i = 0;i < n;i++)
          sum +=arry[i];
     return sum;
}

(2)、形参数组与实参数组为同一数组

  1. 因为数组名是代表该数组的首地址,用数组名作实参时,是把实参数组的首地址赋给形参。
  2. 实际上形参数组和实参数组为同一数组,共同拥有一段内存空间。
    在这里插入图片描述
    (3)、参数声明
    (1)、在声明形参数组时,数组元素的个数不需要写在方括号中,如:
int SumArr(int array[],int n)
{...}

//即便方括号中出现数字,编译器也将忽略该数字。在编译器看来,形参array不是一个真正的数组,只是一个可以存放地址的指针变量

(2)、向函数传递数组的时候,同时通过参数传递数组的元素的个数,有利于提高函数的通用性。

SumArr(a,5);//计算数组a的前5个元素之和
SumArr(a,3);//计算数组a的前3个元素之和

2、通过形参数组修改数组元素

一般变量作参数:传递的是数值,形参的值的改变不影响实参
数组做参数:传递的是数组的首地址,形参数组和实参数组实质上是同一块内存空间,形参数组发生改变,实参数组也随之发生改变。

程序2.1:通过调用函数ModifyArr(),将main()函数中数组a的每个元素变为原来的10倍。
a、通过函数修改数组元素

#include<stdio.h>
void ModifyArr(int arry[],int n);//每个元素变成10倍的函数原型

int main()
{
     int i;
     int a[5] = {1,2,3,4,5};

     printf("原先的数组各元素分别是:\n");//未改变前输出
     for(i = 0;i < 5;i++)
          printf("%d\n",a[i]);

     ModifyArr(a,5);//调用函数改变元素值
     
     printf("变为原来的10的元素分别是:\n");//改变后输出
     for(i = 0;i < 5;i++)
          printf("%d\n",a[i]);

     return 0;
}

void ModifyArr(int arry[],int n)
{
     for(int i = 0;i < n;i++)
          arry[i] *= 10;
}

b、把输出数组元素功能也包装成函数

#include<stdio.h>
void ModifyArr(int arry[],int n);//每个元素变成10倍的函数原型
void Print(int arry[],int n);//输出函数的原型

int main()
{
     int i;
     int a[5] = {1,2,3,4,5};

     printf("原先的数组各元素分别是:\n");
     Print(a,5);//调用输出函数

     ModifyArr(a,5);//调用改变元素函数
     printf("变为原来的10的元素分别是:\n");
     Print(a,5);//调用输出元素

     return 0;
}

void ModifyArr(int arry[],int n)
{
     for(int i = 0;i < n;i++)
          arry[i] *= 10;
}

void Print(int arry[],int n)
{
     int i;
     for(i = 0;i < n;i++)
          printf("%d\n",arry[i]);
}

3、数组排序

给一个n个元素的数组进行升序,然后再依次输出:分别使用InputArr(),SortArr(),DispArr()实现数组的输入、排序、输出

#include<stdio.h>
#define N 20

void InputArr(int arry[],int n);//输入元素的函数原型
void SortArr(int arry[],int n);//排序函数原型
void DispArr(int arry[],int n);//输出函数的原型

int main(void)
{
     int n;
     int a[N];

     printf("Please enter the integers number:\n");
     scanf("%d",&n);

     InputArr(a,n);//输入n个元素存入数组中

     SortArr(a,n);//给n个元素进行升序

     DispArr(a,n);//输出n个元素

     return 0;
}

void InputArr(int arry[],int n)
{
     int i;

     printf("Please enter the numbers:\n ");
     for(i = 0;i < n;i++)
          scanf("%d",&arry[i]);
}

void SortArr(int arry[],int n)
{
     int i;
     int j;
     int temp;

     for(i = 0;i < n-1;i++)
     {
          for(j = i+1;j < n;j++)
          {
               if(arry[i] > arry[j])
               {
                    temp = arry[i];
                    arry[i] = arry[j];
                    arry[j] = temp;
               }
          }
     }
}

void DispArr(int arry[],int n)
{
     int i;

     printf("Please display the integers:\n");
     for(i = 0;i < n;i++)
          printf("%d\n",arry[i]);
}

猜你喜欢

转载自blog.csdn.net/m0_46518461/article/details/106149377