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)
I think their code should return same result however C result is
0 00000016C3F5FB14
0 00000016C3F5FAF0
Python result is
0 1676853313744
0 1676853313744
i don't understand why variable's address isn't changed in Python while variable's address is changed in C
CodePudding user response:
i don't understand why variable's address isn't changed in Python while variable's address is changed in C .
Because in python, we pass an object reference instead of the actual object.
While in your C program we're passing x
by value. This means the function doSomething
has a separate copy of the argument that was passed and since it has a separate copy their addresses differ as expected.
It is possible to make the C program produce the equivalent output as the python program as described below. Demo
If you change the function declaration of doSomething
to void doSomething(int& y)
you will see that now you get the same result as python. In the modified program below, i've changed the parameter to be an int&
instead of just 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;
}
The output of the above modified program is equivalent to the output produced from python:
0 0x7ffce169c814
0 0x7ffce169c814