How to change value of variable passed as argument?

You’re wanting to change where a char* points, therefore you’re going to need to accept an argument in foo() with one more level of indirection; a char** (pointer to a char pointer).

Therefore foo() would be rewritten as:

void foo(char **foo /* changed */, int baa)
{
   if(baa) 
   {
      *foo = "ab"; /* changed */
   }
   else 
   {
      *foo = "cb"; /* changed */
   }
}

Now when calling foo(), you’ll pass a pointer to x using the address-of operator (&):

foo(&x, 1);

The reason why your incorrect snippet prints baa is because you’re simply assigning a new value to the local variable char *foo, which is unrelated to x. Therefore the value of x is never modified.

Leave a Comment