C++ 和 Python 之间的参数差异

parameter difference between C++ and Python

C++

#include <iostream>

using namespace std;

void doSomething(int y)  
{             
    cout << y << " "<< & y << endl; 

}

int main()
{
    
    int x(0);
    cout << x << " " << & x << endl; 
    doSomething(x); 
    return 0;
}

Python

def doSomething(y):
    
    print(y, id(y))

x = 0

print(x, id(x))

doSomething(x)

我认为他们的代码应该 return 相同的结果 C++ 结果是

0 00000016C3F5FB14

0 00000016C3F5FAF0

Python结果是

0 1676853313744

0 1676853313744

我不明白为什么变量的地址在 Python 中没有改变,而变量的地址在 C++ 中改变了

i don't understand why variable's address isn't changed in Python while variable's address is changed in C++.

因为在 python 中,我们传递了一个 对象引用 而不是实际对象。

在您的 C++ 程序中,我们按值 x 传递 。这意味着函数 doSomething 具有传递的参数的单独副本,并且由于它具有单独的副本,因此它们的地址与预期的不同。


可以使 C++ 程序产生与 python 程序等效的输出,如下所述。 Demo

如果将 doSomething 的函数声明更改为 void doSomething(int& y) ,您会发现现在得到与 python 相同的结果。在下面修改后的程序中,我将参数更改为 int& 而不是 int.

//------------------v---->pass object by reference
void doSomething(int& y)  
{             
    cout << y << " "<< & y << endl; 

}

int main()
{
    
    int x(0);
    cout << x << " " << & x << endl; 
    doSomething(x); 
    return 0;
}

上面修改后的程序的output等同于python的输出:

0 0x7ffce169c814
0 0x7ffce169c814