c++中关于数组作为函数参数的几种方法

c++中关于数组作为函数参数的几种方法,第1张

对于数组名作为参数传递,有两种方式:

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]的地址,数组都是通过第一个地址来对后面的元素进行调用的

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12188909.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存