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

标签 c++ pointers

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

相关文章:

pointers - 将未初始化的指针分配给指向操作系统存储位置的对象会破坏计算机或使其崩溃吗?

c++ - 创建对返回指针的引用

c++ - 我将如何清除链表?

c++ - 将二维数组传递给函数以更改值

c++ - 关于在 C++ 中比较两个与指针相关的整数值的意外结果

c++ - 使用 namespace 和局部变量的状态 - 或类?

c++ - 非成员非 friend 函数与私有(private)函数

c++ - 输入类型和参数类型之间的区别

c++ - QMediaPlayer 在 sleep 前不播放

c++ - 出队不适用于从双链表继承的队列类