我不明白我们为什么要使用 *&first(指针和地址运算符一起使用)。 这是什么意思?我应该什么时候使用它?
void splitArray (int *A, 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];
int cnt1 = 0, cnt2 = 0;
for (int i = 0; i < size; i++)
{
if ((i >= ind1) && (i <= ind2)){
first[cnt1] = A[i];
cnt1++;
}
else
{
second[cnt2] = A[i];
cnt2++;
}
}
}
最佳答案
What does it mean? And when should i use it?
出现在类型 之后的&
符号定义了对该类型的引用。因此,例如,int&
是对 int
的引用,my_object&
是对 my_object
的引用,而 int *&
是对 int*
的引用(即对指向 int
的指针的引用)。
当它出现在函数签名中时,这意味着相应的参数将通过引用而不是通过值传递:当通过值传递时,函数接收参数的拷贝;另一方面,当通过引用传递时,函数直接对传递的参数进行操作。
因此,通过引用传递指针意味着函数对该指针值所做的更改将影响传递的原始参数。
特别是这两条指令:
first = new int[firstSize];
second = new int[secondSize];
将动态分配的数组分配给first
和second
。因此,在以下代码片段中(省略号代表其他参数):
int* myfirst = NULL;
int* mysecond = NULL;
splitArray(..., myfirst, ..., mysecond, ...);
当从splitArray()
返回时,myfirst
和mysecond
将指向函数内部分配的数组并分配给first
和 second
。
如果您没有通过引用传递这些指针,那么 myfirst
和 mysecond
的值在 之后仍将是
返回(因为 NULL
splitArray()splitArray()
将处理这些指针的拷贝)。
关于c++ - 一起使用指针和地址运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15743030/