T*和T*&C++之间的区别

Difference between T* and T*& C++

本文关键字:区别 之间 C++      更新时间:2023-10-16

下面两个复制函数的区别是什么?我似乎看不出他们之间有什么区别。特别是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"。两者都是一样的,不是吗?

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

谷歌和拿起一本c++基础书。

将指针传递看作是通过值传递内存地址(即副本)。在接收函数中,你有一个内存地址的副本,你可以改变内存地址指针指向的位置,以及目标内存内容的样子。当从该函数返回时,目标内存仍然改变,但原始指针不变。

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

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

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

但实际上,google一下可以得到更多的细节——这是一个更基本的c++概念。

例如,引用通常在编译器的底层被实现为const *。所以它是指向指针的const指针