【发布时间】:2014-02-17 10:24:10
【问题描述】:
在 python 中是否可以通过引用传递引用?在 C++ 中,传递数据的 python 模型可以通过传递一个指向数据的指针来模仿:指针是按值传递的,函数可以改变它指向的任何东西,但函数不能改变指针的值。但是,在 C++ 中,您也可以传递对指针的引用,在这种情况下,您可以修改指针的值以及它指向的东西。
我想到的是以下C++ sn-p的类似物,
#include <iostream>
int k=5;
void fun(int * &p)
{
p=&k;
}
int main()
{
int i=3;
int *p = &i;
std::cout << *p << std::endl;
fun(p);
std::cout << *p << std::endl;
}
函数改变传入的指针p的值;输出是“3”和“5”。
如果我在上面的函数声明中删除“&”,我会得到类似于以下 python sn-p 所做的事情:
def fun(p):
p=5
p=3
print p
fun(p)
print p
打印 3 两次,因为 fun 无法更改主体中“引用”p 的值。有什么方法可以获得上述 C++ 中的行为?
(为了完整性:我知道python的数据传递模型与按值传递指针不同,因为您不需要在函数内部显式取消引用它。它更像是按值传递引用。但是,我无法通过引用传递引用来编写上面的 C++ 示例,因为 C++ 不允许我更改引用。所以请忽略这种差异。
【问题讨论】:
-
“我知道python的数据传递模型和按值传递指针不一样”它IS和按值传递指针一样。 Python 中的每个值都是一个指针。例如,
.运算符将指针作为左操作数。
标签: python c++ pointers pass-by-reference