Lec 14
Lec 14
Engineers
Structures, Unions
ICEN 360– Spring 2017
Prof. Dola Saha
1
Structure
Ø Collections of related variables under one name.
Ø Variables of may be of different data types.
Ø struct card { Tag
char *face; Members
char *suit;
};
Ø Keyword struct introduces the structure definition.
Ø Members of the same structure type must have unique
names, but two different structure types may contain
members of the same name without conflict.
2
Structure Declaration
Ø struct employee {
char firstName[20];
char lastName[20];
unsigned int age;
char gender;
double hourlySalary;
};
Ø struct employee employee1, employee2;
Ø struct employee employees[100];
Ø struct employee {
char firstName[20];
char lastName[20];
unsigned int age;
char gender;
double hourlySalary;
} employee1, employee2, *employeePtr;
3
Structure Tag
Ø The structure tag name is optional.
Ø If a structure definition does not contain a structure tag
name, variables of the structure type may be declared
only in the structure definition—not in a separate
declaration.
4
Self Reference
Ø A structure cannot contain an instance of itself.
Ø A variable of type struct employee cannot be declared in the
definition for struct employee.
Ø A pointer to struct employee, may be included.
Ø For example,
o struct employee2 {
char firstName[20];
char lastName[20];
unsigned int age;
char gender;
double hourlySalary;
struct employee2 person; // ERROR
struct employee2 *ePtr; // pointer
};
Ø struct employee2 contains an instance of itself (person), which is an
error.
5
Storage in Memory
Ø Structures may not be compared using operators == and
!=, because
§ structure members are not necessarily stored in consecutive bytes of
memory.
Ø Computers may store specific data types only on certain
memory boundaries such as half-word, word or double-
word boundaries.
Ø A word is a standard memory unit used to store data in a
computer—usually 2 bytes or 4 bytes.
6
Storage in Memory
Ø struct example {
char c;
int i;
} sample1, sample2;
7
Initialization
Ø struct card {
char *face;
char *suit;
};
Ø struct card aCard = {"Three", "Hearts"};
8
Accessing Structure Members
Ø the structure member operator (.)—also called the dot
operator
§ printf("%s", aCard.suit); // displays
Hearts
Ø the structure pointer operator (->)—also called the arrow
operator.
§ cardPtr = &aCard;
§ printf("%s", cardPtr->suit); // displays
Hearts
§ Following are equivalent
o cardPtr->suit
o (*cardPtr).suit
9
Example
10
Structure with Function
Ø Structures may be passed to functions by
§ passing individual structure members
§ by passing an entire structure
§ by passing a pointer to a structure.
Ø Functions can return
§ individual structure members
§ an entire structure
§ a pointer to a structure
11
typedef
Ø The keyword typedef is a way to create synonyms (or
aliases) for previously defined data types.
Ø Names for structure types are often defined with typedef
to create shorter type names.
Ø Example:
§ typedef struct card Card;
Card is a synonym for type struct card.
Ø Example:
§ typedef struct {
char *face;
char *suit;
} Card;
§ Card myCard, *myCardPtr, deck[52];
12
Card Shuffling Example (1)
13
Card Shuffling Example (2)
14
Card Shuffling Example (3)
15
Card Shuffling Example (4)
16
Card Shuffling Example (5)
17
Classwork Assignment
Ø Write a program to generate data for N students. Use
structure to create numeric ID and points (max 100) as 2
separate members. Randomly generate data for N
students. Display both the ID and the points of the
student who has received highest point.
18
Union
Ø A union is a derived data type—like a structure—with
members that share the same storage space.
Ø For different situations in a program, some variables may
not be relevant, but other variables are—so a union
shares the space instead of wasting storage on variables
that are not being used.
Ø The members of a union can be of any data type.
Ø The number of bytes used to store a union must be at
least enough to hold the largest member.
19
Definition
Ø union number {
int x;
double y;
};
Ø In a declaration, a union may be initialized with a value of the same
type as the first union member.
Ø union number value = {10};
Ø union number value = {1.43}; // ERROR
20
Permitted Operations
Ø The operations that can be performed on a union are:
§ assigning a union to another union of the same type,
§ taking the address (&) of a union variable,
§ and accessing union members using the structure member operator
and the structure pointer operator.
Ø Unions may not be compared using operators == and !=
for the same reasons that structures cannot be compared.
21
Union Example (1)
22
Union Example (2)
23
Enumeration
Ø Keyword enum, is a set of integer enumeration constants
represented by identifiers.
Ø Values in an enum start with 0, unless specified otherwise, and are
incremented by 1.
Ø For example, the enumeration
o enum months {
JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP,
OCT, NOV, DEC};
creates a new type, enum months, identifiers are set to the
integers 0 to 11, respectively.
Ø Example:
§ enum months {
JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG,
SEP, OCT, NOV, DEC};
identifiers are set to integers 1 to 12, respectively.
24
Enumeration Example
25
Enumeration Example Output
26