在C ++中传递引用

时间:2016-07-22 14:00:39

标签: c++ vector pass-by-reference pass-by-value

我是c ++的新手,根据我的理解,我一直在想,如果我在像fun(vector<int>&v)这样的函数调用中传递向量的地址,那么这些值就不会被复制到int的新向量中,并且所做的任何更改都会反映出来,如果fun(vector<int> v)值被复制。

但在阅读this link from geeksfrogeeks时,我意识到即使&#39;&amp;&#39;不存在函数内部向量的变化在结束后将保留。

这是代码:

/* This function prints all nodes that are distance k from a leaf node
   path[] --> Store ancestors of a node
   visited[] --> Stores true if a node is printed as output.  A node may be k
                 distance away from many leaves, we want to print it once */
void kDistantFromLeafUtil(Node* node, int path[], bool visited[],
                          int pathLen, int k)
{
    // Base case
    if (node==NULL) return;

    /* append this Node to the path array */
    path[pathLen] = node->key;
    visited[pathLen] = false;
    pathLen++;

    /* it's a leaf, so print the ancestor at distance k only
       if the ancestor is not already printed  */
    if (node->left == NULL && node->right == NULL &&
        pathLen-k-1 >= 0 && visited[pathLen-k-1] == false)
    {
        cout << path[pathLen-k-1] << " ";
        visited[pathLen-k-1] = true;
        return;
    }

    /* If not leaf node, recur for left and right subtrees */
    kDistantFromLeafUtil(node->left, path, visited, pathLen, k);
    kDistantFromLeafUtil(node->right, path, visited, pathLen, k);
}

第二次调用KDistanceFromLeafUtil时,一个函数对访问数组所做的更改是可见的,而不使用&#39;&amp;&#39;,这类似于Java中发生的情况,即引用被复制了吗?我在哪里理解它会​​出错?

1 个答案:

答案 0 :(得分:0)

As&#34; bool访问[]&#34;是一个指针,它的功能确实改变了。

例如,如果它是bool或int,则函数中的副本或参数将被更改,但参数本身不会更改,因此您将看不到函数之外的任何效果。