Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 11 Structure and Union Types.

Similar presentations


Presentation on theme: "Chapter 11 Structure and Union Types."— Presentation transcript:

1 Chapter 11 Structure and Union Types

2 User-Defined Structure Types
A database is a collection of information subdivided into records. A record is a collection of information of one data object (e.g., ID, name, and age of a student). C allows us to define a new data type (called structure type) for each category of a structured data object. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-2

3 Declaring Structure Types (1/3)
Syntax of the structure type: struct struct_type { type1 id1; type2 id2; … }; E.g., struct student_info { char[20] name; int age; }; Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-3

4 Declaring Structure Types (2/3)
Syntax of the structure type: typedef struct{ type1 id1; type2 id2; … } struct_type; E.g., typedef struct{ char[20] name; int age; } student_info; Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-4

5 Declaring Structure Types (3/3)
Declaration: student_info student1,student2; Or (without typedef): struct student_info student1,student2; A hierarchical structure is a structure containing components which are also structures. typedef struct{ int NumOfStudents; student_info students[20]; } class_info; Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-5

6 Struct example (without typedef)
Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-6

7 Struct example (with typedef)
Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-7

8 Manipulating Structure Types (1/2)
We can reference a component of a structure by the direct component selection operator, which is a period. E.g., strcpy(student1.name, “Chao”); student1.age = 18; printf(“%s is in age %d\n”, student1.name, student1.age); Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-8

9 Component selection operator
Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-9

10 Manipulating Structure Types (2/2)
The direct component selection operator has the highest priority in the operator precedence. student1.age+student2.age+…; The value of student1.age is referenced first. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-10

11 Operator precedence in struct type
Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-11

12 Manipulating Structure Types (2/2)
The copy of an entire structure can be easily done by the assignment operator. student1 = student2; Each component in one structure is copied into the corresponding component in the other structure. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-12

13 Struct copy Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-13

14 Function with a Structured Input Parameter (1/2)
Suppose there is a structure defined as follows. typedef struct{ char name[20]; double diameter; int moons; double orbit_time,rotation_time; } planet_t; Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-14

15 Function with a Structured Input Parameter (2/2)
When a structure variable is passed as an input argument to a function, all its component values are copied into the local structure variable. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-15

16 Copyright ©2004 Pearson Addison-Wesley. All rights reserved.
11-16

17 Function with a Structured Input/Output Argument
For the following function, we have to call it by “scan_planet(&current_planet);” The input argument is also used to store the result. “*plnp” is parenthesized because & operator has higher precedence. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-17

18 Copyright ©2004 Pearson Addison-Wesley. All rights reserved.
11-18

19 Data Areas of call to scan_planet (¤t_planet);
plnp is a pointer which points to the same data area of current_planet. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-19

20 Indirect Component Selection Operator
In the above example, we use direct component selection operator: period. e.g., &(*plnp).diameter C also provides indirect component selection operator: ->. e.g., “&plnp->diameter” is the same as “&(*plnp).diameter”. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-20

21 Copyright ©2004 Pearson Addison-Wesley. All rights reserved.
11-21

22 Function Returning a Structured Result Type (1/2)
The structure variable can also be used as the return value of a function. Return time_of_day struct Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-22

23 timeupdate example Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-23

24 timeupdate example Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-24

25 Function Returning a Structured Result Type (2/2)
Suppose the current time is 21:58:32, and the elapsed time is 97 seconds. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-25

26 Nested Structures (1/2) Sample Struct Memory placement

27 Nested Structures (2/2) Accessing Nested Struct members

28 Arrays of Structures (1/2)
We can also declare an array of structures. E.g., typedef struct{ int id; double gpa; } student_t; Usage: student_t stulist[50]; stulist[3].id = ; stulist[3].gpa = 3.0; Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-28

29 Arrays of Structures (2/2)
The array of structures can be simply manipulated as arrays of simple data types. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-29

30 Struct Array Example (1/2)

31 Struct Array Example (2/2)

32 Union Types Unions are C variables whose syntax look similar to structures, but act in a completely different manner. A union is a variable that can take on different data types in different situations. The union syntax is: union tag_name { type1 member1 ; type2 member2 ; ... }; Once a union variable has been declared, the amount of memory reserved is just enough to be able to represent the largest member . (Unlike a structure where memory is reserved for all members). Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-32

33 Union Types Union is a data structure which represents only one of the component in the declaration. E.g., typedef union{ int wears_wig; char color[20]; } hair_t; Suppose we declare a variable “hair_t hair_data;”. This hair_data contains either the wears_wig component or the color component but not both. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 11-33

34 Union Example

35 Union Types

36 Union Example

37 Difference between union and structure in terms of Memory
Though unions are similar to structure in so many ways, the difference between them is crucial to understand. As you know, all members of structure can be accessed at any time. But, only one member of union can be accessed at a time in case of union and other members will contain garbage value. This can be demonstrated by this example:

38 Difference between union and structure

39 Difference between union and structure
Output There is difference in memory allocation between union and structure as suggested in above example. The amount of memory required to store a structure variables is the sum of memory size of all members.

40 Difference between union and structure
But, the memory required to store a union variable is the memory required for largest element of an union.


Download ppt "Chapter 11 Structure and Union Types."

Similar presentations


Ads by Google