210 likes | 377 Views
C Structures, Unions, and Enumerations. 1. Structure Definitions. Example struct card { char *face; char *suit; }; struct introduces the definition for structure card card is the structure name and is used to declare variables of the structure type
E N D
1. Structure Definitions • Example • struct card { • char *face; • char *suit; }; • struct introduces the definition for structure card • card is the structure name and is used to declare variables of the structure type • card contains two members of type char * • These members are face and suit
2 Structure Definitions • struct information • A struct cannot contain an instance of itself • Can contain a member that is a pointer to the same structure type • A structure definition does not reserve space in memory • Instead creates a new data type used to define structure variables • Definitions • Defined like other variables: • card oneCard, deck[ 52 ], *cPtr; • Can use a comma separated list: • struct card { • char *face; • char *suit; • } oneCard, deck[ 52 ], *cPtr;
3 Initializing Structures • Initializer lists • Example: card oneCard = { "Three", "Hearts" }; • Assignment statements • Example: card threeHearts = oneCard; • Could also define and initialize threeHearts as follows: card threeHearts; threeHearts.face = “Three”; threeHearts.suit = “Hearts”;
4 Accessing Members of Structures • Accessing structure members • Dot operator (.) used with structure variables card myCard; printf( "%s", myCard.suit ); • Arrow operator (->) used with pointers to structure variables card *myCardPtr = &myCard; printf( "%s", myCardPtr->suit ); • myCardPtr->suit is equivalent to ( *myCardPtr ).suit
Outline Structure definition Structure definition must end with semicolon Dot operator accesses members of a structure
Outline Arrow operator accesses members of a structure pointer
5 Using Structures with Functions • Passing structures to functions • Pass entire structure • Or, pass individual members • Both pass call by value • Pass a pointer to the structure • To pass structures call-by-reference • Pass its address • Pass reference to it • To pass arrays call-by-value • Create a structure with the array as a member • Pass the structure
6 typedef • typedef • Creates synonyms (aliases) for previously defined data types • Use typedef to create shorter type names • Example: • typedef struct Card *CardPtr; • Defines a new type name CardPtr as a synonym for type struct Card * • typedef does not create a new data type • Only creates an alias
7 Example: High-Performance Card Shuffling and Dealing Simulation • Pseudocode: • Create an array of card structures • Put cards in the deck • Shuffle the deck • Deal the cards
Outline Each card has a face and a suit Card is now an alias for struct card
Outline fig10_03.c (2 of 3 ) Constant pointer to modifiable array of Cards Fills the deck by giving each Card a face and suit
Outline Each card is swapped with another, random card, shuffling the deck
8 Unions • union • Memory that contains a variety of objects over time • Only contains one data member at a time • Members of a union share space • Conserves storage • Only the last data member defined can be accessed • union definitions • Same as struct • union Number { • int x; • float y; • }; • union Number value;
Outline Union definition Union definition must end with semicolon Note that y has no value
9 Enumeration Constants • Enumeration • Set of integer constants represented by identifiers • Enumeration constants are like symbolic constants whose values are automatically set • Values start at 0 and are incremented by 1 • Values can be set explicitly with = • Need unique constant names • Example: enum Months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC}; • Creates a new type enum Months in which the identifiers are set to the integers 1 to 12 • Enumeration variables can only assume their enumeration constant values (not the integer representations)
Outline Enumeration sets the value of constant JAN to 1 and the following constants to 2, 3, 4…
Outline Like symbolic constants, enumeration constants are replaced by their values at compile time