gpt4 book ai didi

c++ - 一起使用指针和地址运算符

转载 作者:行者123 更新时间:2023-11-30 01:59:52 25 4
gpt4 key购买 nike

我不明白我们为什么要使用 *&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];

将动态分配的数组分配给firstsecond。因此,在以下代码片段中(省略号代表其他参数):

int* myfirst = NULL;
int* mysecond = NULL;
splitArray(..., myfirst, ..., mysecond, ...);

当从splitArray() 返回时,myfirstmysecond 将指向函数内部分配的数组并分配给first second

如果您没有通过引用传递这些指针,那么 myfirstmysecond 的值在 之后仍将是 NULL splitArray() 返回(因为 splitArray() 将处理这些指针的拷贝)。

关于c++ - 一起使用指针和地址运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15743030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com