Occasionally, a C program will manipulate structures by value such as shown in the following code:
/* File : example.c */
typedef struct Vector {
   double x, y, z;
} Vector;
double dot_product(Vector a, Vector b) {
  return (a.x*b.x + a.y*b.y + a.z*b.z);
}
Vector vector_add(Vector a, Vector b) {
  Vector r;
  r.x = a.x + b.x;
  r.y = a.y + b.y;
  r.z = a.z + b.z;
  return r;
}
Since SWIG only knows how to manage pointers to structures (not their internal
representation), the following translations are made when wrappers are
created:
double wrap_dot_product(Vector *a, Vector *b) {
    return dot_product(*a,*b);
}
Vector *wrap_vector_add(Vector *a, Vector *b) {
    Vector *r = (Vector *) malloc(sizeof(Vector));
    *r = vector_add(*a,*b);
    return r;
}
The functions are then called using pointers from the scripting language interface.
It should also be noted that any function that returns a structure by value results
in an implicit memory allocation. This will be a memory leak unless you take steps
to free the result (see below).
Vector *wrap_vector_add(Vector *a, Vector *b) {
    Vector *r = new Vector(vector_add(*a,*b));
    return r;
}
Similarly, it would be a mistake to use the free() function from C++.  A safer 
approach would be to write a helper function like this:
%inline %{
   void delete_Vector(Vector *v) {
       delete v;
   }
%}