int g = 1;

void f(struct S s, int *pi);

struct S {
  int *pi;
  char c;
  S() : c(‘\0’), pi(0) { }
  S(int i,char _c) : c(_c)
  { pi = new int(i); }
  S(const S& s) : c(s.c)
  { pi = new int(*s.pi); }
  ~S() 
  { delete pi; }
};

void f(struct S s, int *pi)
{ s.c = 'z'; s.pi = pi; }

int main()
{
  static int a = 2; 
  auto int b = 3;
  S s(3,'x');

  s.c = 'a';
  s.pi = &g;
  f(s, &g);
  f(s, &a);
  f(s, &b);
  return 0;
}