T *和T *之间的差异& C ++

时间:2012-12-24 03:36:07

标签: c++

下面两个复制功能有什么区别?我似乎没有看到它们之间的区别。特别是空白*& vs the 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;
}

上述两种印刷品&#34; 2&#34;。两者都不一样吗?

1 个答案:

答案 0 :(得分:5)

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

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

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

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

常见的用法是分配内存的功能,例如:

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

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

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

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