pointers - Why can't I swap memory address of two variables using a function? C -


static void swapaddr(int *numone, int *numtwo) {     int *tmp;      tmp = numone;     numone = numtwo;     numtwo = tmp; }  int main(void) {     int = 15;     int b = 10;      printf("a is: %d\n", a);     printf("address of a: %p\n", &a);     printf("b is: %d\n", b);     printf("address of b: %p\n", &b);      swapaddr(&a, &b);     printf("\n");      printf("a is: %d\n", a);     printf("address of a: %p\n", &a);     printf("b is: %d\n", b);     printf("address of b: %p\n", &b);      return 0; } 

when compile , run piece of code, output

a is: 15 address of a: 0x7fff57f39b98 b is: 10 address of b: 0x7fff57f39b94  is: 15 address of a: 0x7fff57f39b98 b is: 10 address of b: 0x7fff57f39b94 

clearly result not intended, since address not seem have been swapped @ all.

you can't change address of variable.

your 'swapaddr' function changes parameter values, these local function - you're not changing outside function. perhaps best way of understanding function parameter receives copy of value passed function. in case, copy of address of a , copy of address of b. can , change values of variables holding copies (numone , numtwo), , seeing pointers (but don't) change values point @ (the values of variables a , b) - can't change addresses of original variables.

to break down:

static void swapaddr(int *numone, int *numtwo) {     int *tmp;      tmp = numone; 

at point, tmp , numone both point value of a variable...

    numone = numtwo; 

now, numone points instead value of b variable...

    numtwo = tmp; } 

and finally, numtwo points value of a variable. function returns , numone , numtwo no longer exist after point. addresses of variables a , b did not change @ stage.

you could write function exchanges addresses in 2 pointer variables:

static void swapaddr(int **ptrone, int **ptrtwo) {     int *tmp;      tmp = *ptrone;     *ptrone = *ptrtwo;     *ptrtwo = tmp; } 

this allow pass address of 2 pointer variables, , on return pointers swapped - each 1 pointing @ other did previously. again, not change address of variable pointers happened point to.


Comments

Popular posts from this blog

php - Invalid Cofiguration - yii\base\InvalidConfigException - Yii2 -

How to show in django cms breadcrumbs full path? -

ruby on rails - npm error: tunneling socket could not be established, cause=connect ETIMEDOUT -