c++中的指针按值/引用传递
Pointers in c++ pass by value/reference
与简单变量一样,指针变量也可以用作函数中的Value参数或Reference参数。。。。。但当指针变量被用作2保存内存位置或内存位置的内容时,如果指针变量用作Value或Reference参数,会有什么不同????
如果函数A通过引用另一个函数B来传递指针p,那么B可以使p指向内存中的不同位置,而A将看到这种变化。另一方面,如果A按值传递P,则B只能更改P指向的内存的内容。A将看到该内存的更改,但当B返回时,P永远不会指向内存中的不同点。
差异如下:
- 如果按值传递指针,则调用者将看不到被调用者对指针所做的任何更改
- 如果通过引用传递指针,则被调用者对指针所做的任何更改都将对调用者可见
在这里,我谈论的是指针本身的值(即它指向的位置),而不是指向对象的值。
这个小例子说明了通过引用传递指针的必要性
//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;
}
#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
变量是,而不是由对passByValue
的调用更新的。相反,p2
是通过调用passByRefernce
来更新的。
相关文章:
- C++取消引用指针.为什么会发生变化
- 深层复制具有自引用指针的类
- Visual c ++,使用字符串引用/指针调用 dll 函数
- std::unordered_map::提取引用/指针失效
- 为什么在引用指针时将 const 放在 & 符号的左侧有效,而在右侧则无效?
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 如何在 c++ 中使用带有数学运算的引用/指针?
- 了解通过引用传递取消引用指针时C++堆/堆栈分配
- 取消引用指针并立即为其分配变量,导致分段错误
- 如何获取指向类(而不是对象)的引用/指针
- 将类型参数传递给自引用指针
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 在析构函数内取消引用指针时出现分段错误
- 来自引用指针的内存泄漏
- 引用指针后面的值
- 无法取消引用指针
- 引用指针调用成员函数
- 未定义的引用指针的变量模板在clang中功能,而不是GCC
- 取消引用指针以创建数组的副本
- 有关启动引用指针的引用的问题