0% found this document useful (0 votes)
18 views

Lec 14

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views

Lec 14

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 26

C Programming for

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;

Possible storage, but machine dependant

7
Initialization
Ø struct card {
char *face;
char *suit;
};
Ø struct card aCard = {"Three", "Hearts"};

Ø If there are fewer initializers in the list than members in


the structure,
§ the remaining members are automatically initialized to 0
§ or NULL if the member is a pointer.
Ø Assignment Statement of same struct type
§ struct card aCard1 = aCard2;

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

You might also like