使用引用改变变量的地址
Changing address of variables using reference
在下面的代码中为什么它显示2,3虽然我们改变了地址。为什么不3,2
#include <iostream>
using namespace std;
void Addresschange(int *a, int *b)
{
int *t;
t = a;
a = b;
b = t;
cout << *a<<endl<< *b<<endl;//here its displaying 3,2
}
int main ()
{
int a = 2 ,b = 3;
Addresschange(&a ,&b);
cout << a<<endl<< b;//why its displaying 2,3 here
return 0;
}
所以在离开这个函数后,实际参数(a和b)的地址将被改变。这可能吗?
在Addresschange
函数中,a
和b
为局部变量。当你改变它们的值时,只会改变它们在函数内部的值。因此,您的代码只是在Addresschange
函数中交换a
和b
的值。它不使用任何指针操作,所以即使值恰好是指针。这并没有改变它们是按值传递的事实,这意味着改变值不会传播到函数之外。
如果你想用指针改变某物的值,你必须传递一个指针给它,并改变指针指向的值。因此,如果您想更改int *
的值,则需要将int **
传递给该函数。
你的函数传递了一个int *
(指向int的指针),它允许你改变int
的值。例如,*a = 3;
将使a
在调用者中等于3而不是2,使用由value传递的指针来改变它所指向的对象的值。
(在c++中也可以使用引用。除非使用std::reference_wrapper之类的东西,否则您仍然不能"重新定位"引用以使其引用其他内容。)
相关文章:
- 将数组的地址分配给变量并删除
- 将地址分配给本地指针后,公共对象的变量将消失
- 通过按地址访问变量
- 为什么未命名的结构内联变量在每个翻译单元中没有相同的地址?
- 为什么我可以将变量存储在不是其最小对齐方式的倍数的地址?
- 为什么同一个变量的内存地址不同?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 不同块作用域中的 C++ 变量具有相同的地址
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- C++在变量的内存地址上做什么来"deallocate"它?
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- 如何找到在本地范围内声明的变量的地址?
- 附加调试器并以编程方式获取变量地址 Visual Studio
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- 为什么我无法获取 MSVS2019 / C++ 中字符或uint8_t变量的内存地址?
- 为什么变量的打印地址在每次执行时都会打印随机值,即使它是 C 中的逻辑地址?
- 变量地址的运算符[]是如何工作的
- 使用基地址和偏移量获取变量的地址
- 两个不同的进程,在同一地址上有 2 个 std::atomic 变量?
- libmysql:警告:返回局部变量"行"的地址(C++/C)