In addition to tabstop's observation, and implicit point that you need to indicate what a and b are in your function prologue, you need to use pointers when you are passing structs:

Code:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
typedef struct { int real; int imag;} int_type;
int_type int_add(int_type *a, int_type *b);
int main()
{
int_type f, g, y, a, b, c;
f.real=4;
f.imag=7;
g.real=21;
g.imag=77;
y=int_add(&f,&g);
// printf("%d and %d", y[1], y[2]);
getchar();
return 0;
}
int_type int_add(int_type *a, int_type *b)
{
int_type c;
c.real = a->real + b->real;
c.imag = a->imag + b->imag;
return c;
}