把你定义的数组名传给形参就行了,数组名就是指向该数组的指针。数组的 *** 作实质上就是指针的 *** 作。
你用的是二重指针(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;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)