C++ c+中的指针+;传递值/引用
与简单变量一样,指针变量也可以用作函数中的值参数或引用参数。。。。。但是,由于指针变量用于保存内存位置或内存位置的内容,那么如果指针变量用作值或引用参数,会有什么区别呢???如果函数A通过引用另一个函数B传递指针p,那么B可以使p指向内存中的不同位置,A将看到这种变化。另一方面,如果A通过值传递P,那么B只能更改P指向的内存的内容。A将看到该内存的更改,但当B返回时,P将永远不会指向内存中的其他位置。C++ c+中的指针+;传递值/引用,c++,pointers,C++,Pointers,与简单变量一样,指针变量也可以用作函数中的值参数或引用参数。。。。。但是,由于指针变量用于保存内存位置或内存位置的内容,那么如果指针变量用作值或引用参数,会有什么区别呢???如果函数A通过引用另一个函数B传递指针p,那么B可以使p指向内存中的不同位置,A将看到这种变化。另一方面,如果A通过值传递P,那么B只能更改P指向的内存的内容。A将看到该内存的更改,但当B返回时,P将永远不会指向内存中的其他位置。差异如下: 如果按值传递指针,则被调用方对指针所做的任何更改都不会对调用方可见 如果通过引用传递
差异如下:
\include
#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";
}
无效passByValue(int*p){
p=新整数;
}
void passByReference(int*&p){
p=新整数;
}
int main(){
int*p1=0;
int*p2=0;
passByValue(p1);
passByReference(p2);
std::cout这个小示例说明了通过引用传递指针的必要性
//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;
}
或者更确切地说(当通过值传递P时),P永远不会指向内存中的不同位置(您可以解构对象并在同一位置构造新对象,从技术上讲,它是不同的对象)。我有一篇文章可能会对您有所帮助: