C++ 指向引用/地址参数的指针

C++ 指向引用/地址参数的指针,c++,pointers,memory,C++,Pointers,Memory,很抱歉标题混乱,不知道该如何命名。 我有这个功能: static void smooth5(IntVector*& v) { IntVector* tmp = new IntVector(); for(int i=0; i<v->size(); i+=2) tmp->push_back(v->at(i)); delete v; v = tmp; } 当我打印v的内容时,输出为0 2。 但我不明白是什么 IntVec

很抱歉标题混乱,不知道该如何命名。 我有这个功能:

static void smooth5(IntVector*& v)
{
    IntVector* tmp = new IntVector();
    for(int i=0; i<v->size(); i+=2)
        tmp->push_back(v->at(i));
    delete v;
    v = tmp;
}
当我打印v的内容时,输出为0 2。 但我不明白是什么

IntVector*& v
真正的意思是当v是指向堆上对象的指针时。有人能解释一下吗?

IntVector*&声明对指针的引用。将此用作函数参数允许smooth5修改调用方的v副本

它类似于指针,但比将指针传递给指针更具可读性-IntVector**

在您的示例中,smooth5删除调用者的IntVector并将其指向其tmp变量。

IntVector*&声明对指针的引用。将此用作函数参数允许smooth5修改调用方的v副本

它类似于指针,但比将指针传递给指针更具可读性-IntVector**


在您的示例中,smooth5删除调用者的IntVector并将其指向其tmp变量。

这不是指向引用的指针,而是指向指针的引用。这意味着不向函数传递指针的副本,而是向函数传递引用。因此,对函数smooth5中的指针所做的任何修改都将影响传递给它的参数。在本例中,指针v.

这不是指向引用的指针,而是指向指针的引用。这意味着不向函数传递指针的副本,而是向函数传递引用。因此,对函数smooth5中的指针所做的任何修改都将影响传递给它的参数。在本例中,指针v.

代码中的IntVector*&v的含义取决于谁在读取它。 当编译器读取它时,意味着v是对 指向IntVector的指针,IntVector是指向的typedef std::vector?。当我读到它时,它意味着作者 代码可能不理解C++是如何工作的,并且是 尝试适应不合适的Java或C习惯用法。这个 惯用的写作方式是:

void smooth5( IntVector& v )
{
    IntVector results;
    for ( int i = 0; i < v->size(); i += 2 ) {
        results.push_back( v[i] );
    }
    v.swap( results );
}
任何涉及指向向量的指针的代码都是高度复杂的 可疑。

代码中IntVector*&v的含义取决于谁在读它。 当编译器读取它时,意味着v是对 指向IntVector的指针,IntVector是指向的typedef std::vector?。当我读到它时,它意味着作者 代码可能不理解C++是如何工作的,并且是 尝试适应不合适的Java或C习惯用法。这个 惯用的写作方式是:

void smooth5( IntVector& v )
{
    IntVector results;
    for ( int i = 0; i < v->size(); i += 2 ) {
        results.push_back( v[i] );
    }
    v.swap( results );
}
任何涉及指向向量的指针的代码都是高度复杂的
可疑。

这是对指针的引用。在C++中没有引用指针,它根本不存在。它是指向一个指针的引用。它是通过引用传递指针。它是指针的引用。C++中没有引用指针,它根本不存在。它是指向一个指针的引用。它通过指针传递指针。我个人理解它是指向栈上指针V的地址的指针。为什么它是指向指针的引用而不是相反的?@simonc实际上指向指针的指针和指针引用并不完全相等。引用永远不能为空。+1不讨论更具可读性;然而,它不像dbl指针那样可以为root null=P@IvayloStrandjev,WhozCraig,很好的观点,谢谢,我已经尝试修改了语言here@TheNotMe您是在询问命名*&指针引用还是指针引用?我觉得点菜很自然,但这可能只是习惯。您从一个指针开始,并希望通过引用传递它。。。对指针的引用似乎准确地描述了这一点。我个人理解它是指向堆栈上指针v地址的指针。为什么它是指向指针的引用而不是相反的?@simonc实际上指向指针的指针和指针引用并不完全相等。引用永远不能为空。+1不讨论更具可读性;然而,它不像dbl指针那样可以为root null=P@IvayloStrandjev,WhozCraig,很好的观点,谢谢,我已经尝试修改了语言here@TheNotMe您是在询问命名*&指针引用还是指针引用?我觉得点菜很自然,但这可能只是习惯。您从一个指针开始,并希望通过引用传递它。。。对指针的引用似乎准确地描述了这一点。