2

下面的两个复制功能有什么区别?我似乎看不出它们之间有什么区别。特别是 void*& 与 void*。

那么T*&和T*有什么区别呢?我什么时候会使用其中一个?另外,如果我让他们接受 const 参数,会发生什么?会有什么不同?

#include <iostream>

void Copy(void* Source, void* Destination, int Size)
{
    //memcpy(Destination, Source, Size);
    char* S = static_cast<char*>(Source);
    char* D = static_cast<char*>(Destination);
    *D = *S;
}

void Copy2(void* &Source, void* &Destination, int Size)
{
    char* S = static_cast<char*>(Source);
    char* D = static_cast<char*>(Destination);
    *D = *S;
}


int main()
{
    int A = 2;
    int B = 5;
    int C = 7;

    void* pA = &A;
    void* pB = &B;
    void* pC = &C;

    Copy(pA, pB, 1);
    Copy2(pA, pC, 1);

    std::cout<< B <<std::endl;
    std::cout<< C <<std::endl;
}

以上都打印“2”。两者都一样不是吗?

4

1 回答 1

7

一个是指针,另一个是指针的引用。

谷歌两者并拿起一本 C++ 基础书籍。

将指针传递视为按值传递内存地址(即副本)。在接收函数中,您拥有内存地址的副本,您可以更改该内存地址指针指向的位置以及目标内存内容的外观。当您从该函数返回时,目标内存仍会更改,但原始指针未更改。

相反,对指针的引用允许您在从函数返回后更改该内存指向的位置。否则是一样的。

一个常见的用法是分配内存的函数,例如:

SomeClass *someClass = null;
PopulateSomeClass(someClass);
...

void PopulateSomeClass(SomeCLass* &someCLass)
{
   someClass = new SomeClass;
}

但实际上,请在谷歌上搜索更多细节 - 这是一个更基本的 C++ 概念。

例如,引用通常在编译器的内部实现为 const *。所以它是一个指向指针的 const 指针。

于 2012-12-24T03:44:33.410 回答