Structure and function in C programming

In this tutorial, we will learn how to pass structures as argument to a function and how to manipulate the structure.

structure and function in C

Functions and structure together helps to make the program in Object Oriented.

Example : object-oriented program design. Consider a structurethat represents a complex number type.

typedef struct {
double real;
double imag;
} Complex;

Construct a Complex object with the initial values r and i

Complex make complex(double r, double i)
 {
 Complex c;
 c.real = r;
 c.imag = i;
 return c;
 }
Complex add_complex(Complex a, Complex b)
 {
   Complex sum;
   sum.real = a.real + b.real;
   sum.imag = a.imag + b.imag;  //Add two complex numbers
   return sum;  //return the result
}

Complex mult_complex(Complex a, Complex b)
/* Multiply two complex numbers and return the result. */
{
  Complex prod;
  prod.real = a.real*b.real − a.imag*b.imag; 
  prod.imag = a.real*b.imag + a.imag*b.real;//Multiply two complex numbers
  return prod; //returns the result
 }

void addequal_complex(Complex* a, const Complex* b)
{
  a−>real += b−>real;
  a−>imag += b−>imag;  //Add two complex numbers and store the result in a
 }

int is_equal(Complex a, Complex b)
{
  return a.real == b.real && a.imag == b.imag; //Return TRUE if the values of a and b are equal
 }

In above example, functions add_complex(Complex a, Complex b) takes two arguments as input.

Complex sum;
sum.real = a.real + b.real;

Here, sum is the variable of type complex . a.real  access the real variable of complex a and b.real access the real variable of complex b.  Similarly for the imag  variable.

As mentioned in previous topic we access variable of structure using ( . ). 

But in above example, in addequal_complex function ->  is used. ->  is used  to access structure pointer member.

a−>real += b−>real;

Here, (*a).real is same as a->real and 
           (*b).real is same as b->real