就像简单变量一样,指针变量也可以用作函数中的Value参数或Reference参数.....但是当使用指针变量时2保持内存位置或内存位置的内容那么它会有什么不同呢如果指针变量用作值或参考参数????
,则生成答案 0 :(得分:9)
如果函数A通过引用另一个函数B传递指针P,那么B可以使P指向存储器中的不同位置,并且A将看到该改变。另一方面,如果A通过P值,则B只能改变P指向的存储器的内容。 A会看到对该内存的更改,但是当B返回时,P将永远不会指向内存中的不同的点。
答案 1 :(得分:5)
区别如下:
在这里,我说的是指针本身的值(即它指向的位置),而不是指向对象的值。
答案 2 :(得分:4)
小例子说明需要通过引用传递指针
//pass by value
void InitString1( char* buf )
{
buf = new char[5];
}
//pass by reference
void InitString2( char*& buf )
{
buf = new char[5];
}
int main()
{
char* buffer = 0;
InitString1( buffer);
//buffer is still null and memory leaks
delete [] buffer;
InitString2( buffer );
//buffer will be assigned correctly
delete [] buffer;
return 0;
}
答案 3 :(得分:0)
#include <iostream>
void passByValue(int* p) {
p = new int;
}
void passByReference(int*& p) {
p = new int;
}
int main() {
int *p1 = 0;
int *p2 = 0;
passByValue(p1);
passByReference(p2);
std::cout << p1 << "\n";
std::cout << p2 << "\n";
}
考虑上述计划。第一行将始终打印为零,这意味着调用main
时p1
的{{1}}变量未更新。相比之下,通过调用passByValue
更新了p2
。