Thursday, June 10, 2010

Structure as Argument

Structure Arguments
There are many objects defined throughout the library as structures of
varying and possibly large sizes. Due to the inefficiency of passing structures
by value (copying the whole structure to a function), structures are generally
passed to functions by reference. Because of this, there is always a potential
to pass an invalid pointer to a function which expects a pointer to a structure.
The following examples illustrate the right and wrong ways to use such a
function. Given a structure and a library function which initializes it,
typedef  struct
{
    int   a, b, c, d;
} big_struct;

void    initialize( struct  big_struct   *s )
{
    s->a = 1;   s->b = 2;   s->c = 3;    s->d = 4;
}
the incorrect method of using this function is:

int  main()
{
    big_struct   *s;

    initialize( s );   /* WRONG */
}
because the variable s is
an uninitialized pointer. The correct method is to define a structure variable,
not a pointer to a structure, and pass a pointer to the structure:

int  main()
{
    big_struct   s;

    initialize( &s );
}
Alternately, the incorrect example above could have been corrected by allocating
the s pointer
before calling initialize.

No comments:

Post a Comment