Home > Back-end >  parameter difference between C and Python
parameter difference between C and Python

Time:05-29

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