Pointers and Structures
Thursday, February 21st, 2008Pointers and Structures As you may know, we can declare the form of a block of data
containing different data types by means of a structure
declaration. For example, a personnel file might contain
structures which look something like:
struct tag{
char lname[20]; /* last name */
char fname[20]; /* first name */
int age; /* age */
float rate; /* e.g. 12.75 per hour */
};
Let’s say we have a bunch of these structures in a disk file
and we want to read each one out and print out the first and last
name of each one so that we can have a list of the people in our
files. The remaining information will not be printed out. We
will want to do this printing with a function call and pass to
that function a pointer to the structure at hand. For
demonstration purposes I will use only one structure for now. But
realize the goal is the writing of the function, not the reading
of the file which, presumably, we know how to do.
For review, recall that we can access structure members with
the dot operator as in:
————— program 5.1 ——————
#include <stdio.h>
#include <string.h>
struct tag{
char lname[20]; /* last name */
char fname[20]; /* first name */
int age; /* age */
float rate; /* e.g. 12.75 per hour */
};
struct tag my_struct; /* declare the structure m_struct */
int main(void)
{
strcpy(my_struct.lname,”Jensen”);
strcpy(my_struct.fname,”Ted”);
printf(”\n%s “,my_struct.fname);
printf(”%s\n”,my_struct.lname);
return 0;
}
————– end of program 5.1 ————–
Now, this particular structure is rather small compared to
many used in C programs. To the above we might want to add:
date_of_hire; (data types not shown)
date_of_last_raise;
last_percent_increase;
emergency_phone;
medical_plan;
Social_S_Nbr;
etc…..
If we have a large number of employees, what we want to do
manipulate the data in these structures by means of functions.
For example we might want a function print out the name of the
employee listed in any structure passed to it. However, in the
original C (Kernighan & Ritchie, 1st Edition) it was not possible
to pass a structure, only a pointer to a structure could be
passed. In ANSI C, it is now permissible to pass the complete
structure. But, since our goal here is to learn more about
pointers, we won’t pursue that.
Anyway, if we pass the whole structure it means that we must
copy the contents of the structure from the calling function to
the called function. In systems using stacks, this is done by
pushing the contents of the structure on the stack. With large
structures this could prove to be a problem. However, passing a
pointer uses a minimum amount of stack space.
























