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.