下面两个复制功能有什么区别?我似乎没有看到它们之间的区别。特别是空白*& 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;。两者都不一样吗?
答案 0 :(得分:5)
一个是指针,另一个是指针的引用。
谷歌并拿起一本C ++基础书。
考虑将指针传递为按值传递内存地址(即副本)。在接收函数中,您有一个内存地址的副本,您可以更改内存地址指针指向的位置,以及目标内存的内容。从该函数返回时,目标内存仍然更改,但原始指针未更改。
相反,对指针的引用允许您在从函数返回后更改内存指向的位置。否则它是一样的。
常见的用法是分配内存的功能,例如:
SomeClass *someClass = null;
PopulateSomeClass(someClass);
...
void PopulateSomeClass(SomeCLass* &someCLass)
{
someClass = new SomeClass;
}
但实际上,谷歌这是为了更多细节 - 这是一个更基本的C ++概念。
例如,引用通常在编译器的封面下实现为const *。所以它是指向指针的const指针。