【发布时间】:2019-04-18 07:54:40
【问题描述】:
以下是拆分数组的代码。
第一个输出数组将包含给定两个索引和第二个索引之间的输入数组条目
输出数组将包含其余条目。
void splitArray(int *arr, int size, int ind1, int ind2,
int *&first, int &firstSize, int *&second, int &secondSize){
firstSize = ind2 - ind1 + 1;
secondSize = size - firstSize;
first = new int[firstSize];
second = new int[secondSize];
for (int i = 0; i < ind1; i++)
second[i] = arr[i];
for (int i = ind1; i <= ind2; i++)
first[i - ind1] = arr[i];
for (int i = ind2 + 1; i < size; i++)
second[i - firstSize] = arr[i];
}
我可以理解为什么它有像 int *&first 和 int *&second 这样的参数,而不是它们与 int first 和 int second 相同,但在这段代码中它们被用作指向动态数组的指针。
【问题讨论】:
-
不,它们不是 -
int*&是对指向int的指针的引用。 -
这里,
&的意思是“这是一个 C++ 引用”,而不是“获取地址”。他们使用相同的符号表示两个不同的事物,它们之间的相关性仅比“按位与”的相关性稍高。 -
*&first将与first相同,如果它们是表达式并且*和&是运算符,但这是一个声明,所以*和&不是运算符但类型的一部分。