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
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