以下是用于拆分数组的代码。
第一个输出数组将在给定的两个索引之间包含输入数组条目,第二个
输出数组将包含其余条目。
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
相同,但是在此代码中使用了它们作为指向动态数组的指针。
答案 0 :(得分:3)
T *&foo
声明对指向T
的指针的引用。不要将声明和定义中的与号与地址运算符混淆。
如果被调用函数需要能够修改传递给它的指针的值,则使用指针引用:
void bar(int *&ptr) {
ptr = 42; // change the value of the pointer (pseudo ... 42 is most likely
*ptr = 42; // change the value of the pointee not a valid pointer value)
}
// ...
int *foo = nullptr;
bar(foo);
// foo == 42;
提示:从右到左读取类型:T *&
-> &* T
->引用(&
)指向指针(*
)以键入{{1 }}。