谁能解释一下数组在函数中该怎么传递(c++中)

2024-12-25 08:49:44
推荐回答(5个)
回答1:

数组在C++中是以指针的形式进行传递的。

我们可以把形参写成指针形式,也可以写成数组形式,但本质上传递的都是指针。引用《C++ Primer》上的一个例子:

//尽管形式不同,但这三个print函数是等价的
//每个函数都有一个const int*类型的形参
void print(const int*);
void print(const int[]);   //可以看出来,函数的意图是作用于一个数组
void print(const int[10]); //这里的维度表示我们期望数组含有多少元素,实际不一定

以上三种形式的声明是等价的,当调用print函数时,编译器只检查传入的参数是否是(或能转换成)const int*:

int i = 0, j[2] = {0, 1};
print(&i);  //正确:&i的类型是int*
print(j);   //正确:j转换成int*并指向j[0]

回答2:

1、数组在函数中的传递是以指针方式进行的,作为实参,被调函数仅接收数组的首址,至于数组的长度往往需要另外一个实参提供(字符数组除外),
2、欲将在被调函数中定义的数组传递(返回)给调用函数,需要动态申请(new)内存,并仍以指针方式回传,长度不需要回传,但要记住在程序结束前要释放(delete)已申请的动态空间。

回答3:

1.直接传数组首地址,即数组的变量名;
2.最好使用new/allocate,在主函数中delete/free;
3.数组首地址就是指针,当然如有必要,把长度也传递;
4.即有指针又有引用看上就乱了,但应该可以用指针的引用。

回答4:

数组名+数组大小。只能这样子。
int A[10];
1.int GetArray( int B[], int length);
2.在子函数里 new 一个或者 malloc一个新数组,但不支持这样做,会有风险
3.int GetArray( int* B, int length);
4.数组可以引用,但是其结果,得到的只是一个数组头个元素的地址。

回答5:

函数中数组的传递,实际上传递的是数组的首地址,理解了这一点就行了
指针是地址,引用也是地址。。。