gpt4 book ai didi

python - C++和Python的参数区别

转载 作者:行者123 更新时间:2023-12-05 09:27:27 26 4
gpt4 key购买 nike

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)

我认为他们的代码应该返回相同的结果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

关于python - C++和Python的参数区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72422112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com