#include <stdio.h>
#include <stdlib.h>

typedef struct {
  int first;
  int second;
} Pair;

void set_pair1(Pair p) {
  p.first = 333;
  p.second = 4;
}

void set_pair2(Pair *p) {
  Pair tmp;
  tmp.first = 333;
  tmp.second = 4;
  p = &tmp;
}

void set_pair3(Pair *p) {
  Pair tmp;
  tmp.first = 333;
  tmp.second = 4;
  *p = tmp;
}

int main() {
  Pair p1, p2, p3;

  set_pair1(p1);
  set_pair2(&p2);
  set_pair3(&p3);

  printf("p1: %d %d\n", p1.first, p1.second);
  printf("p2: %d %d\n", p2.first, p2.second);
  printf("p3: %d %d\n", p3.first, p3.second);

  // ERRONOUS
  Pair *p4;
  set_pair3(p4);
  printf("p4: %d %d\n", p4->first, p4->second);

  return 0;
}