0% found this document useful (0 votes)
8 views35 pages

Lecture 11 Structures

DATA STRUCTURE

Uploaded by

ahobatija200
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)
8 views35 pages

Lecture 11 Structures

DATA STRUCTURE

Uploaded by

ahobatija200
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/ 35

STRUCTURES

LECTURE 11
C - STRUCTURES
❖ C arrays allow you to define type of variables that can
hold several data items of the same kind but structure
is another user defined data type available in C
programming, which allows you to combine data items of
different kinds.
❖ Structure is the collection of variables of different types
under a single name for better handling.
❖ Structures are used to represent a record, Suppose you
want to keep track of your books in a library. You might
want to track the following attributes about each book:
➢ Title
➢ Author
➢ Subject
➢ Book ID
DEFINING A STRUCTURE
❏ To define a structure, you must use the struct statement.
The struct statement defines a new data type, with more
than one member for your program.
❏ The format of the struct statement is this:

▪ The structure tag is optional and each member


definition is a normal variable definition, such as int i; or
float f; or any other valid variable definition.
▪ At the end of the structure's definition, before the final
semicolon, you can specify one or more structure variables
but it is optional.
DEFINING A STRUCTURE
❏ Here is the way you would declare the Book structure:

Example 1 Structure tag

Member
definition

Example 2

structure
variables

🞆 With the declaration of the structure you have created a


new type, called Books.
STRUCTURE VARIABLE DECLARATION
❏ When a structure is defined, it creates a user-defined type but,
no storage is allocated.
❏ For the above structure of person, variable can be declared as:

Another way of creating


structure variable is:

In both cases, 2 variables p1, p2 and array p having 20 elements of


type struct person are created.
DIFFERENCE BETWEEN C VARIABLE, ARRAY AND
STRUCTURE
➢ A normal C variable can hold only one data of one data
type at a time.
➢ An array can hold group of data of same data type.

➢ A structure can hold group of data of different data types

➢ Data types can be int, char, float, double and long double
etc.
BELOW TABLE EXPLAINS FOLLOWING CONCEPTS IN C
STRUCTURE
➢ How to declare a C structure?
➢ How to initialize a C structure?
➢ How to access the members of a C structure?
ACCESSING MEMBERS OF A STRUCTURE
➢ Structure can be accessed in 2 ways. They are,
○ Using normal structure variable
○ Using pointer variable
➢ There are two types of operators used for accessing
members of a structure.
○ Member operator(.)
○ Structure pointer operator(->)
➢ Dot(.) operator is used to access the data using normal
structure variable.
➢ Arrow (->) is used to access the data using pointer
variable.
➢ We already have learnt how to access structure data
using normal variable. So, we are showing here how to
access structure data using pointer variable.
POINTERS TO STRUCTURES
EXAMPLE PROGRAM FOR C STRUCTURE
This program is used to store and access “id, name
and percentage” for one student. We can also store
and access these data for many students using
array of structures.

Output:
Id is: 1
Name is: Raju
Percentage is: 86.500000
EXAMPLE PROGRAM-ARRAY OF STRUCTURES
This program is used to store and access “id, name and
percentage” for 3 students. Structure array is used in
this program to store and display records for many
students. You can store “n” number of students record
by declaring structure variable as ‘struct student
record[n]“, where n can be 1000 or 5000 etc.

Output:
Records of STUDENT : 1
Id is: 1
Name is: Raju
Percentage is: 86.500000
Records of STUDENT : 2
Id is: 2
Name is: Surendren
Percentage is: 90.500000
Records of STUDENT : 3
Id is: 3 Name is: Thiyagu
Percentage is: 81.500000
EXAMPLE PROGRAM OF STRUCTURE
Write a C program to add two distances entered by user. Measurement
of distance should be in inch and feet.(Note: 12 inches = 1 foot)
PASSING STRUCTURE TO FUNCTION

▪ A structure can be passed to any function from main


function or from any sub function.
▪ Structure definition will be available within the function
only.
▪ It won’t be available to other functions unless it is passed
to those functions by value or by address(reference).
▪ Else, we have to declare structure variable as global
variable. That means, structure variable should be
declared outside the main function. So, this structure will
be visible to all the functions in a C program.
▪ Passing structure to function in C: It can be done in
below 3 ways.
▪ Passing structure to a function by value
▪ Passing structure to a function by address(reference)
▪ No need to pass a structure – Declare structure variable as
global
EXAMPLE – PASSING STRUCTURE TO FUNCTION BY VALUE
▪ A structure variable can be passed to the function as an argument as normal
variable.
▪ If structure is passed by value, change made in structure variable in function
definition does not reflect in original structure variable in calling function.
▪ You would access structure variables in the similar way as you have accessed in
the above example:

Write a C program to create a


structure student, containing
name and roll. Ask user the
name and roll of a student in
main function. Pass this
structure to a function and
display the information in that
function.

Output:
Enter student's name: Kevin
Enter roll number: 149
Name: Kevin
Roll: 149
Passing structure variable
EXAMPLE – PASSING STRUCTURE TO FUNCTION BY VALUE
In this program, the whole structure is passed to
another function by value. It means the whole
structure is passed to another function with all
members and their values. So, this structure can
be accessed from called function. This concept is
very useful while writing very big programs in C.

Output:
Id is: 1
Name is: Raju
Percentage is: 86.500000
EXAMPLE – PASSING
STRUCTURE TO FUNCTION
BY VALUE
PASSING STRUCTURE TO FUNCTION BY ADDRESS/REFERENCE

❏ The address location of structure variable is passed to


function while passing it by reference.
❏ If structure is passed by reference, change made in
structure variable in function definition reflects in
original structure variable in the calling function.
❏ Exercise: Write a C program to add two distances(feet-
inch system) entered by user. To solve this program,
make a structure. Pass two structure variable
(containing distance in feet and inch) to add function by
reference and display the result in main function
without returning it.
EXAMPLE–PASSING STRUCTURE TO FUNCTION
BY REFERENCE

Output:

First distance
Enter feet: 12
Enter inch: 6.8
Second distance
Enter feet: 5
Enter inch: 7.5

Sum of distances = 18'-2.3"


Explanation of previous example

In the previous program, structure variables dist1 and


dist2 are passed by value (because value of dist1 and dist2
does not need to be displayed in main function) and dist3
is passed by reference ,i.e, address of dist3 (&dist3) is
passed as an argument.

Thus, the structure pointer variable d3 points to the


address of dist3. If any change is made in d3 variable,
effect of it is seed in dist3 variable in main function.
EXAMPLE–PASSING STRUCTURE TO FUNCTION BY
ADDRESS/REFERENCE
Here the structure is passed to another function
by address. It means only the address of the
structure is passed to another function. The whole
structure is not passed to another function with all
members and their values. So, this structure can
be accessed from called function by its address.

Output:
Id is: 1
Name is: Raju
Percentage is: 86.500000
EXAMPLE–PASSING
STRUCTURE TO FUNCTION BY
ADDRESS/REFERENCE
EXAMPLE PROGRAM TO DECLARE A STRUCTURE VARIABLE AS
GLOBAL
Structure variables also can be declared as global
variables as we declare other variables in C. So,
When a structure variable is declared as global,
then it is visible to all the functions in a program.
In this scenario, we don’t need to pass the
structure to any function separately.

Output:
Id is: 1
Name is: Raju
Percentage is: 86.500000
COPY A STRUCTURE
▪ There are many methods to
copy one structure to
another structure in C.
• We can copy using direct
assignment of one structure
to another structure or
• we can use C inbuilt
function “memcpy()” or
• we can copy by individual
structure members.

Output:
Records of STUDENT1 - record1 structure
Id : 1
Name : Raju
Percentage : 90.500000
Records of STUDENT1 – Direct copy from record1
Id : 1
Name : Raju
Percentage : 90.500000
Records of STUDENT1 – copied from record1 using
memcpy
Id : 1
Name : Raju
Percentage : 90.500000
Records of STUDENT1 – Copied individual members from
record1
Id : 1
Name : Raju
Percentage : 90.500000
KEYWORD TYPEDEF WHILE USING STRUCTURE

▪ Programmer generally use typedef while using structure


in C language. For example:

▪ Here, typedef keyword is used in creating a type


comp(which is of type as struct complex). Then, two
structure variables c1 and c2 are created by this comp
type.
STRUCT MEMORY ALLOCATION
▪ How structure members are stored in memory?
• Always, contiguous(adjacent) memory locations are used to store
structure members in memory. Consider below example to understand
how memory is allocated for structures.
Output:
size of structure in bytes : 16

Address of id1 = 675376768


Address of id2 = 675376772
Address of a = 675376776
Address of b = 675376777
Address of percentage = 675376780
STRUCT MEMORY ALLOCATION
▪ There are 5 members declared for structure in above program.
In 32 bit compiler,
• 4 bytes of memory is occupied by int datatype.
• 1 byte of memory is occupied by char datatype and
• 4 bytes of memory is occupied by float datatype.
▪ Please refer below table to know from where to where memory
is allocated for each datatype in contiguous (adjacent) location
in memory.
STRUCT MEMORY ALLOCATION
? The pictorial representation of above structure memory
allocation is given below.
? This diagram will help you to understand the memory
allocation concept in C very easily.
STRUCTURE PADDING

▪ In order to align the data in memory, one or more empty


bytes (addresses) are inserted (or left empty) between
memory addresses which are allocated for other
structure members while memory allocation. This
concept is called structure padding.
▪ Architecture of a computer processor is such a way that
it can read 1 word (4 byte in 32 bit processor) from
memory at a time.
▪ To make use of this advantage of processor, data are
always aligned as 4 bytes package which leads to insert
empty addresses between other member’s address.
▪ Because of this structure padding concept in C, size of
the structure is always not same as what we think.
STRUCTURE PADDING
▪ For example, consider below structure that has 5 members.
▪ struct student
{
int id1;
int id2;
char a;
char b;
float percentage;
};
▪ As per C concepts, int and float datatypes occupy 4 bytes each and
char datatype occupies 1 byte for 32 bit processor. So, only 14 bytes
(4+4+1+1+4) should be allocated for above structure.
▪ But, this is wrong. Do you know why?
➢ Architecture of a computer processor is such a way that it can read 1 word
from memory at a time.
➢ 1 word is equal to 4 bytes for 32 bit processor and 8 bytes for 64 bit
processor.
➢ So, 32 bit processor always reads 4 bytes at a time and 64 bit processor
always reads 8 bytes at a time.
➢ This concept is very useful to increase the processor speed.
➢ To make use of this advantage, memory is arranged as a group of 4 bytes
in 32 bit processor and 8 bytes in 64 bit processor.
EXAMPLE PROGRAM FOR
STRUCTURE PADDING
? This C program is compiled and
executed in 32 bit compiler.
? Please check memory allocated
for structure1 and structure2 of
this program.

Output:
size of structure1 in bytes : 16

Address of id1 = 1297339856


Address of id2 = 1297339860
Address of name = 1297339864
Address of c = 1297339865
Address of percentage = 1297339868

size of structure2 in bytes : 20

Address of id1 = 1297339824


Address of name = 1297339828
Address of id2 = 1297339832
Address of c = 1297339836
Address of percentage = 1297339840
STRUCTURE PADDING ANALYSIS FOR PREVIOUS C PROGRAM

▪ Memory allocation for structure1:


❑ In above program, memory for structure1 is allocated sequentially for
first 4 members.
❑ Whereas, memory for 5th member “percentage” is not allocated
immediate next to the end of member “c”
❑ There are only 2 bytes remaining in the package of 4 bytes after
memory allocated to member “c”.
❑ Range of this 4 byte package is from 1297339864 to 1297339867.
❑ Addresses 1297339864 and 1297339865 are used for members “name
and c”. Addresses 1297339866 and 1297339867 only is available in this
package.
❑ But, member “percentage” is datatype of float and requires 4 bytes. It
can’t be stored in the same memory package as it requires 4 bytes. Only
2 bytes are free in that package.
❑ So, next 4 byte of memory package is chosen to store percentage data
which is from 1297339868 to 1297339871.
❑ Because of this, memory 1297339866 and 1297339867 are not used by
the program and those 2 bytes are left empty.
❑ So, size of structure1 is 16 bytes which is 2 bytes extra than what we
think. Because, 2 bytes are left empty.
STRUCTURE PADDING ANALYSIS FOR PREVIOUS C PROGRAM

Memory allocation for structure1


STRUCTURE PADDING ANALYSIS FOR PREVIOUS C PROGRAM

▪ Memory allocation for structure2:


❑ Memory for structure2 is also allocated as same as above concept.
Please note that structure1 and structure2 are same. But, they differ
only in the order of the members declared inside the structure.
❑ 4 bytes of memory is allocated for 1st structure member “id1″ which
occupies whole 4 byte of memory package.
❑ Then, 2nd structure member “name” occupies only 1 byte of memory in
next 4 byte package and remaining 3 bytes are left empty. Because,
3rd structure member “id2″ of datatype integer requires whole 4 byte of
memory in the package. But, this is not possible as only 3 bytes
available in the package.
❑ So, next whole 4 byte package is used for structure member “id2″.
❑ Again, 4th structure member “c” occupies only 1 byte of memory in next
4 byte package and remaining 3 bytes are left empty.
❑ Because, 5th structure member “percentage” of datatype float requires
whole 4 byte of memory in the package.
❑ But, this is also not possible as only 3 bytes available in the
package. So, next whole 4 byte package is used for structure member
“percentage”.
❑ So, size of structure2 is 20 bytes which is 6 bytes extra than what we
think. Because, 6 bytes are left empty.
STRUCTURE PADDING ANALYSIS FOR PREVIOUS C PROGRAM

Memory allocation for structure2


Thank You

You might also like