CSC 161 | Grinnell College | Spring, 2009 |
Imperative Problem Solving and Data Structures | ||
Please read the following materials carefully:
King, Sections 16.1-16.2, pages 377-386
The following commentary comes from Marge Coahran with minor editing.
A struct in C is the same as a record in many other (pre- object-oriented) programming languages. A struct is a collection of data, and functions that operate on a struct are not embedded within the struct. Rather, we write such functions separately and pass structs to them as arguments.
For example, a program for keeping track of students might use the following collection of variables:
struct student { int number; double testGrades[2]; double grade; };The struct is named
student
while its members are number
,
testGrades
,
and grade
. The name of a struct is also called a tag.
A later declaration of
struct student John;will create a structure variable named
John
. The individual
member variables can be referred to using the syntax
variableName.memberName
, as in the following example:
John.number = 991234567; John.testGrades[0] = 10.; John.testGrades[1] = 11.; John.grade = (John.testGrades[0] / 15. + John.testGrades[1] / 12.) / 2.;
The declaration
struct student csc201[30];might be used to create an array of student records.
Alternatively, we can define a new data type to describe our student information, using the instruction:
typedef struct { int number; double testGrades[2]; double grade; } student_t;and then declare our variables using this new type, with instructions like:
student_t John; student_t csc201[300];
You might find it helpful to think of the typedef
instruction as giving a "blueprint" for the creation of a
student_t
struct variable,
while the declarations cause the "construction" of variables having type
student_t
by setting aside memory.
The following struct may be used to represent a time value in hours, minutes and seconds format (e.g., 12:34:56.123):
typedef struct { int hours; int mins; double secs; } timeinfo_t;The
timeinfo_t
identifier
is the struct "tag". A new type called timeinfo_t
is created.
I didn't call it time
because there is already a C library
function called time
.
Structure types may be used as return types or argument types in functions. A function that converts time values given in seconds (e.g., 12345.67) to time values given in hh:mm:ss.sss format might have the prototype:
timeinfo_t convertTime( double realTime )and would look like:
timeinfo_t convertTime( double realTime ) { timeinfo_t result; . . . return result; }
This document is available on the World Wide Web as
http://www.walker.cs.grinnell.edu/courses/161.sp09/readings/reading-structs.shtml
created 11 April 2008 last revised 18 January 2009 |
![]() ![]() |
For more information, please contact Henry M. Walker at walker@cs.grinnell.edu. |