1 使用数组名本身,如以下程序求数组a的最大值
#include <stdioh>
int max(int x[],int n) //作为数组定义形式
{
int i,m=x[0];
for(i=1;i<n;i++)
if(m<x[i]) m=x[i];
return m;
}
int main(void)
{
int a[5]={10,32,45,12,26};
int m;
m=max(a,5); //数组名用为实参
printf("a的最大值:%d\n",m);
return 0;
}
2用指针作为参数,这就简单了,如:
int max(int x,int n) //作为数组定义形式
{
int i,m=x[0];
for(i=1;i<n;i++)
if(m<x[i]) m=x[i];
return m;
}
int main(void)
{
int a[5]={10,32,45,12,26};
int m;
m=max(a,5); //数组名用为实参
printf("a的最大值:%d\n",m);
return 0;
}
两者结果一样
数组名作函数参数
数组名可以作函数的实参和形参。如:
main(){
int array[10];
…………
f(array,10);
…………
}
f(int arr[],int n)
{
…………
}
array为实参数组名,arr为形参数组名。在学习指针变量之后就更容易理解这个问题了。数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,形参得到该地址后也指向同一数组。这就好象同一件物品有两个彼此不同的名称一样。
同样,指针变量的值也是地址,数组指针变量的值即为数组的首地址,当然也可作为函数的参数使用。
归纳起来,如果有一个实参数组,想在函数中改变此数组的元素的值,实参与形参的对应关系有以下4种:
形参和实参都是数组名。
main(){ int a[10];
……
f(a,10)
……
f(int x[],int n)
{
……
}
}a和x指的是同一组数组。
实用数组,形参用指针变量。
main(){
int a[10];
……
f(a,10)
……
}
f(int x,int n)
{
……
}
实参、型参都用指针变量。
实参为指针变量,型参为数组名。
一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,从而形参是改变不影响实参
数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全相同,是存放在同一存储空间的同一个数组。这样形参数组
修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。
#include<stdioh>
//数组作为函数参数,可以省略元素个数
//数组作为函数参数,传递是整个数组的地址,修改了函数形参数组元素的值,会影响到外面的实参数组
void change(int array[])
{
printf("array ==%p\n",array);
array[0] = 100;
}
int main()
{
int ages[6] = {10,11,13,15,11,18};
printf("array ==%p\n",ages);
change(ages);
printf("%d\n",ages[0]);
return 0;
}
输出结果为: array ==0x7fff5be26c00
array ==0x7fff5be26c00
100
如void fun(int a[],int n)
void main()
{
int b[7]l
fun(b,7);
}
在方法声明中的形参有int a[],意思就是要传递数组给它,而再调用的时候直接将数组名b传递给它就可以在函数里面直接调用数组了。实际上数组名就是数组的第一个元素的地址,也就是b[0]的地址,数组都是通过第一个地址来对后面的元素进行调用的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)