定义一个函数,形参是一个数组,要对一个数组进行 *** 作,怎么传参?

定义一个函数,形参是一个数组,要对一个数组进行 *** 作,怎么传参?,第1张

把你定义的数组名传给形参就行了,数组名就是指向该数组的指针。数组的 *** 作实质上就是指针的 *** 作。

你用的是二重指针(int

p;),p是二重指针,那么p[q]就是一重指针,p[q]即可访问该指针(p[q])所指向的变量。

可以说是对,在C++中,数组并不像java那样是对象,C++的数组就是一段内存,值传递,其实是指针传递

当然,C++那么牛B的,肯定支持数组的引用传递了

值传递:

void fun(int arr[]);

实际上传递的是数组的首地址指针;

引用:

void fun(int (&arr)[SIZE]);

注意,方括号中的SIZE必须要写,而且在调用的时候必须用这个SIZE的数组,否则会出错;

例如:

void fun(int (&arr)[5]);

在调用的时候传入的数组必须是int型的大小为5的数组:

int nArr[5];

fun(nArr);

否则会错;

更牛B的用法:

刚才说了,C++是很牛B的,那么牛B的,难道定义的函数只能处理固定大小的数组?当然不是

这样定义,可以处理任意大小的数组:

template < int N >

void fun(int (&arr)[N]);

这样,任意大小的int型数组都可以传递进来了

这个方法叫“非类型模版参数

属于地址传递,在函数里修改的话,将直接影响调用方的数值。这是因为数组名代表这个数组的首地址,不过是静态不可更改的而已。在函数里用引用[i]下标时,就是找到这个数组第i号元素的地址进行修改的。所以是第于是地址传递。

C#中数组是可以做为参数传递的,C#中传值可以用Form与Form之间传参数的方法来实现。只要在第二个Form里的默认构造函数添加具体的参数,然后在第一个Form里具体实现传值的事件里添加Form2 frm2=new Form2(数组参数);frm2ShowDialog();第二个Form加载后,就可以在第二个Form添加变量获取传递的参数了。

一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,从而形参是改变不影响实参

数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全相同,是存放在同一存储空间的同一个数组。这样形参数组

修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。

#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

以指针方式或数组的方式都可以实现参数传递的,实际上都是将数组的首地址传递到子函数中去的。

例如:

#Include <Stdioh>

#Include <Stringh>

void Fun1( Char pstr )

{

    Printf("%s\n",Pstr );

    }

    

void

 Fun2( char arr[] )

 {

 

    Printf("%s\n",arr );

}

int Main()

{

     Char Str[10];

          Strcpy(str , "HELLO" );

     

     Fun1( str );

    

    Fun2(str);

   

   Return 0;

}

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存