/* CSE 333 Su12 Lecture 5 demo: structarg.c */
/* Gribble/Perkins */

/* Structure call-by-value vs using pointers for call-by-reference */

#include <stdio.h>

// Point is a (struct point_st)
// PointPtr is a (struct point_st *)
typedef struct point_st {
  int x, y;
} Point, *PointPtr;

// call by value - doesn't affect argument
void DoubleXBroken(Point p) {
  p.x *= 2;
}

// call by reference
void DoubleXWorks(PointPtr p) {
  p->x *= 2;
}

int main(int argc, char **argv) {
  Point a = {1,1};

  DoubleXBroken(a);
  printf("(%d,%d)\n", a.x, a.y);

  DoubleXWorks(&a);
  printf("(%d,%d)\n", a.x, a.y);

  return 0;
}