数组作为函数参数
2017-04-23 23:23
211 查看
数组作为函数参数
1.数组元素作函数实参
数组元素可以做函数实参,不能做形参。因为形参是在函数被调用时临时分配存储单元的,不能作为一个数组元素单独分配存储单元(数组是一个整体,在内存中站连续的一段存储单元)。数组元素做实参时,把实参的值传给形参,是“值传递”方式。数据传递的方向是从实参传到形参,单向传递。
eg:输入十个数,要求输出其中值最大的元素和该数是第几个数。
数组名做函数参数时,向形参(数组名或指针变量)传递的是数组首元素的地址。
eg1:有一个一维数组score,内放10个学生的成绩,求平均成绩。#include<stdio.h>
int main()
{
float average(float array[]);
float score[10],aver;
int i;
printf("input 10 score:\n");
for(i=0;i<10;i++)
scanf("%f",&score[i]);
printf(
4000
"\n");
aver = average(score);
printf("average score is %5.2f\n",aver);
return 0;
}
float average(float array[])
{
int i;
float aver,sum = 0;
for(i=0;i<10;i++)
sum = sum+array[i];
aver = sum/10;
return(aver);
}
分析:
a.数组名做函数参数时,在主调函数和被调函数分别定义数组,如array是形参数组名,score为是参数组名。
b.实参数组与形参数组类型应一致。
c.形参数组首元素(array[0])和是参数组首元素(score[0])具有同一地址,它们共占同一存储单元,score
和array
指的是同一单元。score
和array
具有相同的值。
eg2:两个班级,分别有不同的学生人数,调用一个average函数,分别求这两个班学生的平均成绩。
为简化,设两个班学生数分别为5和10。
数组名做函数实参时,是把首元素的地址传递给形参数组,此时这两个就共占同一段内存
假若改变了b[0]的值,也就意味着a[0]的值也改变了。形参数组中各元素值如发生变化会使形参数组元素的值同时发生变化例如下题:
用选择法对数组中10个整数按由小到大排列(即冒泡排序法)。
形参数组改变也使是参数组随之改变。
3.多维数组名作函数参数
eg:有一个3*4的矩阵,求所有元素中的最大值
#include<stdio.h>
int main()
{
int max_value(int array[][4]);
int a[3][4] = {{1,9,5,7},{2,4,12,38},{15,17,34,12}};
printf("Max value is %d\n",max_value(a));
}
int max_value(int array[][4])
{
int i,j,max;
max = array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)
max = array[i][j];
return (max);
}
1.数组元素作函数实参
数组元素可以做函数实参,不能做形参。因为形参是在函数被调用时临时分配存储单元的,不能作为一个数组元素单独分配存储单元(数组是一个整体,在内存中站连续的一段存储单元)。数组元素做实参时,把实参的值传给形参,是“值传递”方式。数据传递的方向是从实参传到形参,单向传递。
eg:输入十个数,要求输出其中值最大的元素和该数是第几个数。
#include<stdio.h> int main() { int max(int x,int y); int a[10],m,n,i; printf("enter 10 integer numbers:"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(i=0,m=a[0],n=0;i<10;i++) { if(max(m,a[i])>m) { m=max(m,a[i]); n=i; } } printf("The largest number is %d\nit is the %dth number.\n",m,n+1); } int max(int x,int y) { return (x>y?x:y); }
函数调用过程中注意:
调用结束,形参单元被释放。实参单元仍保留并维持原值没有改变。如果在执行一个被调用函数时,形参的值发生改变,不会改变主调函数的实参的值。2.数组名做函数参数
数组名做函数参数时,向形参(数组名或指针变量)传递的是数组首元素的地址。
eg1:有一个一维数组score,内放10个学生的成绩,求平均成绩。#include<stdio.h>
int main()
{
float average(float array[]);
float score[10],aver;
int i;
printf("input 10 score:\n");
for(i=0;i<10;i++)
scanf("%f",&score[i]);
printf(
4000
"\n");
aver = average(score);
printf("average score is %5.2f\n",aver);
return 0;
}
float average(float array[])
{
int i;
float aver,sum = 0;
for(i=0;i<10;i++)
sum = sum+array[i];
aver = sum/10;
return(aver);
}
分析:
a.数组名做函数参数时,在主调函数和被调函数分别定义数组,如array是形参数组名,score为是参数组名。
b.实参数组与形参数组类型应一致。
c.形参数组首元素(array[0])和是参数组首元素(score[0])具有同一地址,它们共占同一存储单元,score
和array
指的是同一单元。score
和array
具有相同的值。
eg2:两个班级,分别有不同的学生人数,调用一个average函数,分别求这两个班学生的平均成绩。
为简化,设两个班学生数分别为5和10。
#include<stdio.h> int main() { float average(float array[],int n); float socre1[5] = {98.5,97,91.5,60,55}; float socre2[10] = {67.5,89.5,99,69.5,77,89.5,76.5,54,60,99.5}; printf("The average of class A is %6.2f\n",average(socre1,5)); printf("The average of class B is %6.2f\n",average(socre2,10)); return 0; } float average(float array[],int n) { int i; float aver,sum = 0; for(i=0;i<n;i++) sum = sum+array[i]; aver = sum/n; return(aver); }
数组名做函数实参时,是把首元素的地址传递给形参数组,此时这两个就共占同一段内存
假若改变了b[0]的值,也就意味着a[0]的值也改变了。形参数组中各元素值如发生变化会使形参数组元素的值同时发生变化例如下题:
用选择法对数组中10个整数按由小到大排列(即冒泡排序法)。
#include<stdio.h> int main() { void sort(int array[],int n); int a[10],i; printf("enter array:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); sort(a,10); printf("The sorted array:\n"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); return 0; } void sort(int array[],int n) { int i,j,k,t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(array[j]<array[k]) k = j; t = array[k]; array[k] = array[i]; array[i] = t; } }
形参数组改变也使是参数组随之改变。
3.多维数组名作函数参数
eg:有一个3*4的矩阵,求所有元素中的最大值
#include<stdio.h>
int main()
{
int max_value(int array[][4]);
int a[3][4] = {{1,9,5,7},{2,4,12,38},{15,17,34,12}};
printf("Max value is %d\n",max_value(a));
}
int max_value(int array[][4])
{
int i,j,max;
max = array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)
max = array[i][j];
return (max);
}
相关文章推荐
- 指针数组作为函数参数的使用问题
- 数组作为函数参数 自动转换为同类型指针
- QTP函数练习--数组作为参数
- 作为函数参数的多维数组想到的两个问题
- string和数组作为参数传递给函数
- 数组名作为函数参数
- C++中将数组的指针作为函数参数
- 鸡啄米:C++编程入门系列之二十六(数组、指针和字符串:数组的存储与初始化、对象数组、数组作为函数参数)
- 作为函数参数的数组名
- 数组作为函数参数进行传递
- 数组大小不能在函数内计算,而是应该作为参数传进来
- C++中二位数组作为函数参数
- C++中二位数组作为函数参数
- 函数作为参数,函数数组的练习。
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- C++ 多维数组作为函数的返回值和参数
- 数组作为函数参数
- 如何理解数组作为函数参数时,数组名就是指针?
- 数组作为函数参数的传递
- C#中数组作为函数参数的传递方式