Try this ... expanding on Dani's @deceptikon's hint of 'using better variable names'
/* pointer_demo.c */
#include<stdio.h>
/* global */
int q_global = 10;
void func( int* );
int main()
{
int r = 30;
int* r_address = &r;
func( r_address ); /* after this call, value at r_address is set to 15 */
printf( "%d", *r_address ); /* prints 15 */
return 0;
}
void func( int* address_copy )
{
*address_copy = 15; /* set value at (calling) address to 15 */
address_copy = &q_global; /* update address_copy to NOW hold address of int q_global */
printf( "%d ", *address_copy ); /* print value at address_copy, i.e. value of q_global */
}