SlideShare a Scribd company logo
C structures
     and unions

1
C structures: aggregate, yet scalar
       aggregate in that they hold multiple data items at one
        time
           named members hold data items of various types
           like the notion of class/field in C or C++
            – but without the data hiding features
       scalar in that C treats each structure as a unit
           as opposed to the “array” approach: a pointer to a collection
            of members in memory
           entire structures (not just pointers to structures) may be
            passed as function arguments, assigned to variables, etc.
           Interestingly, they cannot be compared using ==
            (rationale: too inefficient)


    2
Structure declarations
       Combined variable and type declaration
struct tag {member-list} variable-list;
       Any one of the three portions can be omitted

struct {int a, b; char *p;} x, y;                                /* omit tag */
           variables x, y declared with members as described:
            int members a, b and char pointer p.
           x and y have same type, but differ from all others –
            even if there is another declaration:
            struct {int a, b; char *p;} z;
            /* z has different type from x, y */



    3                         CS 3090: Safety Critical Programming in C
Structure declarations
struct S {int a, b; char *p;};                            /* omit variables */
       No variables are declared, but there is now a type struct
        S that can be referred to later


struct S z;             /* omit members */
           Given an earlier declaration of struct S, this declares a
            variable of that type

typedef struct {int a, b; char *p;} S;
  /* omit both tag and variables */
           This creates a simple type name S
            (more convenient than struct S)

    4                         CS 3090: Safety Critical Programming in C
Recursively defined structures
       Obviously, you can’t have a structure that contains an
        instance of itself as a member – such a data item would
        be infinitely large
       But within a structure you can refer to structures of the
        same type, via pointers
struct TREENODE {
  char *label;
  struct TREENODE *leftchild, *rightchild;
}




    5                     CS 3090: Safety Critical Programming in C
Recursively defined structures
       When two structures refer to each other, one must be
        declared in incomplete (prototype) fashion
struct HUMAN;
struct PET {
  char name[NAME_LIMIT];
  char species[NAME_LIMIT];
  struct HUMAN *owner;
} fido = {″Fido″, ″Canis lupus familiaris″};
struct HUMAN {
  char name[NAME_LIMIT];
                              We can’t initialize the owner member
  struct PET pets[PET_LIMIT];               at this point,
} sam = {″Sam″, {fido}};        since it hasn’t been declared yet


    6                    CS 3090: Safety Critical Programming in C
Member access
         Direct access operator s.m
             subscript and dot operators have same precedence and
              associate left-to-right, so we don’t need parentheses for
              sam.pets[0].species
         Indirect access s->m: equivalent to (*s).m
           Dereference a pointer to a structure, then return a member of
            that structure
           Dot operator has higher precedence than indirection operator
            , so parentheses are needed in (*s).m
          (*fido.owner).name                  or     fido.owner->name

   . evaluated first: access owner member                    . and -> have equal precedence
* evaluated next: dereference pointer to HUMAN                     and associate left-to-right
      7                         CS 3090: Safety Critical Programming in C
Memory layout
struct COST { int amount;
                 char currency_type[2]; }
struct PART { char id[2];
                 struct COST cost;
                 int num_avail; }
layout of struct PART:
                                      currency_type


     id                amount                                       num_avail

                               cost
Here, the system uses 4-byte alignment of integers,
so amount and num_avail must be aligned
Four bytes wasted for each structure!

 8                      CS 3090: Safety Critical Programming in C
Memory layout
A better alternative (from a space perspective):
struct COST { int amount;
              char currency_type; }
struct PART { struct COST cost;
              char id[2];
              int num_avail;
}
                      currency_type


      amount               id          num_avail
            cost



 9                    CS 3090: Safety Critical Programming in C
Bit fields                    Bit field members must be ints

    If space is a serious concern, you can select the number
     of bits used for each member
struct CHAR { unsigned ch: 7;
                                    Note: This won’t work on
              unsigned font: 6;     machines with 16-bit ints
              unsigned size: 19; };
Layout possibilities (machine-dependent):


            ch      font                                           size



                                    size              font          ch


    10                 CS 3090: Safety Critical Programming in C
Bit fields
    Portability is an issue:
        Do any bit field sizes exceed the machine’s int size?
        Is there any pointer manipulation in your code that assumes a
         particular layout?
    Bit fields are “syntactic sugar” for more complex shifting/
     masking
        e.g. to get font value, mask off the ch and size bits, then shift
         right by 19
        This is what actually happens in the object code –
         bit fields just make it look simpler at the source level



    11                      CS 3090: Safety Critical Programming in C
Structures as function arguments
    Structures are scalars, so they can be returned and
     passed as arguments – just like ints, chars
struct BIG changestruct(struct BIG s);
        Call by value: temporary copy of structure is created
        Caution: passing large structures is inefficient
         – involves a lot of copying
    avoid by passing a pointer to the structure instead:
void changestruct(struct BIG *s);
    What if the struct argument is read-only?
        Safe approach: use const
void changestruct(struct BIG const *s);


    12                     CS 3090: Safety Critical Programming in C
Unions
    Like structures, but every member occupies the same
     region of memory!
        Structures: members are “and”ed together: “name and species
         and owner”
        Unions: members are “xor”ed together

union VALUE {
   float f;
   int i;
   char *s;
};
/* either a float xor an int xor a string */

    13                    CS 3090: Safety Critical Programming in C
Unions
    Up to programmer to determine how to interpret a
     union (i.e. which member to access)
    Often used in conjunction with a “type” variable that
     indicates how to interpret the union value

enum TYPE { INT, FLOAT, STRING };
struct VARIABLE {
   enum TYPE type;             Access type to determine
   union VALUE value;           how to interpret value
};




    14                 CS 3090: Safety Critical Programming in C
Unions
    Storage
        size of union is the size of its largest member
        avoid unions with widely varying member sizes;
         for the larger data types, consider using pointers instead
    Initialization
        Union may only be initialized to a value appropriate for the
         type of its first member




    15                      CS 3090: Safety Critical Programming in C

More Related Content

PPTX
Structure in C language
PPTX
Union in C programming
PPT
Structure in C
PPTX
C Structures and Unions
PPTX
C programing -Structure
PPTX
C Programming: Structure and Union
PPTX
Handling of character strings C programming
PPT
C Structures & Unions
Structure in C language
Union in C programming
Structure in C
C Structures and Unions
C programing -Structure
C Programming: Structure and Union
Handling of character strings C programming
C Structures & Unions

What's hot (20)

PPTX
Union in c language
PPT
C++ Memory Management
PPTX
Pointers in C Programming
PPTX
Functions in c
PPTX
C programming - Pointers
PPT
Storage classes
PPTX
Pointer in C++
PDF
PPTX
PPTX
Structure in C
PPTX
File in C language
PDF
Managing I/O in c++
PPTX
Presentation on c structures
PPT
Union In language C
PPTX
User defined functions in C
PPTX
File Management in C
PPTX
Array in c programming
PPT
standard template library(STL) in C++
PPTX
Inline Functions and Default arguments
PPT
Union in c language
C++ Memory Management
Pointers in C Programming
Functions in c
C programming - Pointers
Storage classes
Pointer in C++
Structure in C
File in C language
Managing I/O in c++
Presentation on c structures
Union In language C
User defined functions in C
File Management in C
Array in c programming
standard template library(STL) in C++
Inline Functions and Default arguments
Ad

Similar to C Structures And Unions (20)

PPT
structures and unions in 'C'
PPT
Oop lec 3(structures)
PPTX
PDF
4.-C-Tokens.pdf.Cpp tockens.where are they use
PPTX
Module 5-Structure and Union
PDF
Structures
PPTX
structenumtypedefunion.pptx
PDF
03 structures
PDF
Structures, Unions, and Storage Classes in C: Organizing Complex Data and Man...
PDF
slideset 7 structure and union (1).pdf
PPTX
M-2-Pointers-2.pptx by engineering institutions
PPT
Advanced+pointers
PPTX
Chapter 8 Structure Part 2 (1).pptx
PPT
Programming Fundamentals C++ Basics ES 036
PDF
C++_notes.pdf
PPT
C Language_PPS_3110003_unit 8ClassPPT.ppt
PPTX
IT LAB Presentation (Aditya Sharma 23EEACS005).pptx
PDF
Unit 4 qba
PDF
C structure and union
PPTX
Explanation about Structures in C language.pptx
structures and unions in 'C'
Oop lec 3(structures)
4.-C-Tokens.pdf.Cpp tockens.where are they use
Module 5-Structure and Union
Structures
structenumtypedefunion.pptx
03 structures
Structures, Unions, and Storage Classes in C: Organizing Complex Data and Man...
slideset 7 structure and union (1).pdf
M-2-Pointers-2.pptx by engineering institutions
Advanced+pointers
Chapter 8 Structure Part 2 (1).pptx
Programming Fundamentals C++ Basics ES 036
C++_notes.pdf
C Language_PPS_3110003_unit 8ClassPPT.ppt
IT LAB Presentation (Aditya Sharma 23EEACS005).pptx
Unit 4 qba
C structure and union
Explanation about Structures in C language.pptx
Ad

More from Ram Sagar Mourya (11)

DOC
A must Sql notes for beginners
PPT
There Is Always A Better Way
PPS
PPS
3 Things In Our Life
DOC
Microsoft Word Shortcut Keys
DOC
Apple Macintosh Shortcut Keys
PDF
Discrete Mathematics - Mathematics For Computer Science
PPT
.net framework
DOC
Asp.Net Tutorials
DOC
Asp.Net The Data List Control
DOC
Asp.Net Database
A must Sql notes for beginners
There Is Always A Better Way
3 Things In Our Life
Microsoft Word Shortcut Keys
Apple Macintosh Shortcut Keys
Discrete Mathematics - Mathematics For Computer Science
.net framework
Asp.Net Tutorials
Asp.Net The Data List Control
Asp.Net Database

Recently uploaded (20)

DOCX
Euro SEO Services 1st 3 General Updates.docx
PDF
Ôn tập tiếng anh trong kinh doanh nâng cao
PDF
How to Get Funding for Your Trucking Business
DOCX
Business Management - unit 1 and 2
PDF
Elevate Cleaning Efficiency Using Tallfly Hair Remover Roller Factory Expertise
PDF
IFRS Notes in your pocket for study all the time
PDF
COST SHEET- Tender and Quotation unit 2.pdf
PDF
Katrina Stoneking: Shaking Up the Alcohol Beverage Industry
PDF
Unit 1 Cost Accounting - Cost sheet
PDF
Types of control:Qualitative vs Quantitative
PPTX
5 Stages of group development guide.pptx
PDF
Training And Development of Employee .pdf
PPTX
CkgxkgxydkydyldylydlydyldlyddolydyoyyU2.pptx
PDF
Stem Cell Market Report | Trends, Growth & Forecast 2025-2034
PPTX
Dragon_Fruit_Cultivation_in Nepal ppt.pptx
PDF
Traveri Digital Marketing Seminar 2025 by Corey and Jessica Perlman
DOCX
unit 1 COST ACCOUNTING AND COST SHEET
PPTX
Business Ethics - An introduction and its overview.pptx
PPTX
Lecture (1)-Introduction.pptx business communication
PDF
Deliverable file - Regulatory guideline analysis.pdf
Euro SEO Services 1st 3 General Updates.docx
Ôn tập tiếng anh trong kinh doanh nâng cao
How to Get Funding for Your Trucking Business
Business Management - unit 1 and 2
Elevate Cleaning Efficiency Using Tallfly Hair Remover Roller Factory Expertise
IFRS Notes in your pocket for study all the time
COST SHEET- Tender and Quotation unit 2.pdf
Katrina Stoneking: Shaking Up the Alcohol Beverage Industry
Unit 1 Cost Accounting - Cost sheet
Types of control:Qualitative vs Quantitative
5 Stages of group development guide.pptx
Training And Development of Employee .pdf
CkgxkgxydkydyldylydlydyldlyddolydyoyyU2.pptx
Stem Cell Market Report | Trends, Growth & Forecast 2025-2034
Dragon_Fruit_Cultivation_in Nepal ppt.pptx
Traveri Digital Marketing Seminar 2025 by Corey and Jessica Perlman
unit 1 COST ACCOUNTING AND COST SHEET
Business Ethics - An introduction and its overview.pptx
Lecture (1)-Introduction.pptx business communication
Deliverable file - Regulatory guideline analysis.pdf

C Structures And Unions

  • 1. C structures and unions 1
  • 2. C structures: aggregate, yet scalar  aggregate in that they hold multiple data items at one time  named members hold data items of various types  like the notion of class/field in C or C++ – but without the data hiding features  scalar in that C treats each structure as a unit  as opposed to the “array” approach: a pointer to a collection of members in memory  entire structures (not just pointers to structures) may be passed as function arguments, assigned to variables, etc.  Interestingly, they cannot be compared using == (rationale: too inefficient) 2
  • 3. Structure declarations  Combined variable and type declaration struct tag {member-list} variable-list;  Any one of the three portions can be omitted struct {int a, b; char *p;} x, y; /* omit tag */  variables x, y declared with members as described: int members a, b and char pointer p.  x and y have same type, but differ from all others – even if there is another declaration: struct {int a, b; char *p;} z; /* z has different type from x, y */ 3 CS 3090: Safety Critical Programming in C
  • 4. Structure declarations struct S {int a, b; char *p;}; /* omit variables */  No variables are declared, but there is now a type struct S that can be referred to later struct S z; /* omit members */  Given an earlier declaration of struct S, this declares a variable of that type typedef struct {int a, b; char *p;} S; /* omit both tag and variables */  This creates a simple type name S (more convenient than struct S) 4 CS 3090: Safety Critical Programming in C
  • 5. Recursively defined structures  Obviously, you can’t have a structure that contains an instance of itself as a member – such a data item would be infinitely large  But within a structure you can refer to structures of the same type, via pointers struct TREENODE { char *label; struct TREENODE *leftchild, *rightchild; } 5 CS 3090: Safety Critical Programming in C
  • 6. Recursively defined structures  When two structures refer to each other, one must be declared in incomplete (prototype) fashion struct HUMAN; struct PET { char name[NAME_LIMIT]; char species[NAME_LIMIT]; struct HUMAN *owner; } fido = {″Fido″, ″Canis lupus familiaris″}; struct HUMAN { char name[NAME_LIMIT]; We can’t initialize the owner member struct PET pets[PET_LIMIT]; at this point, } sam = {″Sam″, {fido}}; since it hasn’t been declared yet 6 CS 3090: Safety Critical Programming in C
  • 7. Member access  Direct access operator s.m  subscript and dot operators have same precedence and associate left-to-right, so we don’t need parentheses for sam.pets[0].species  Indirect access s->m: equivalent to (*s).m  Dereference a pointer to a structure, then return a member of that structure  Dot operator has higher precedence than indirection operator , so parentheses are needed in (*s).m (*fido.owner).name or fido.owner->name . evaluated first: access owner member . and -> have equal precedence * evaluated next: dereference pointer to HUMAN and associate left-to-right 7 CS 3090: Safety Critical Programming in C
  • 8. Memory layout struct COST { int amount; char currency_type[2]; } struct PART { char id[2]; struct COST cost; int num_avail; } layout of struct PART: currency_type id amount num_avail cost Here, the system uses 4-byte alignment of integers, so amount and num_avail must be aligned Four bytes wasted for each structure! 8 CS 3090: Safety Critical Programming in C
  • 9. Memory layout A better alternative (from a space perspective): struct COST { int amount; char currency_type; } struct PART { struct COST cost; char id[2]; int num_avail; } currency_type amount id num_avail cost 9 CS 3090: Safety Critical Programming in C
  • 10. Bit fields Bit field members must be ints  If space is a serious concern, you can select the number of bits used for each member struct CHAR { unsigned ch: 7; Note: This won’t work on unsigned font: 6; machines with 16-bit ints unsigned size: 19; }; Layout possibilities (machine-dependent): ch font size size font ch 10 CS 3090: Safety Critical Programming in C
  • 11. Bit fields  Portability is an issue:  Do any bit field sizes exceed the machine’s int size?  Is there any pointer manipulation in your code that assumes a particular layout?  Bit fields are “syntactic sugar” for more complex shifting/ masking  e.g. to get font value, mask off the ch and size bits, then shift right by 19  This is what actually happens in the object code – bit fields just make it look simpler at the source level 11 CS 3090: Safety Critical Programming in C
  • 12. Structures as function arguments  Structures are scalars, so they can be returned and passed as arguments – just like ints, chars struct BIG changestruct(struct BIG s);  Call by value: temporary copy of structure is created  Caution: passing large structures is inefficient – involves a lot of copying  avoid by passing a pointer to the structure instead: void changestruct(struct BIG *s);  What if the struct argument is read-only?  Safe approach: use const void changestruct(struct BIG const *s); 12 CS 3090: Safety Critical Programming in C
  • 13. Unions  Like structures, but every member occupies the same region of memory!  Structures: members are “and”ed together: “name and species and owner”  Unions: members are “xor”ed together union VALUE { float f; int i; char *s; }; /* either a float xor an int xor a string */ 13 CS 3090: Safety Critical Programming in C
  • 14. Unions  Up to programmer to determine how to interpret a union (i.e. which member to access)  Often used in conjunction with a “type” variable that indicates how to interpret the union value enum TYPE { INT, FLOAT, STRING }; struct VARIABLE { enum TYPE type; Access type to determine union VALUE value; how to interpret value }; 14 CS 3090: Safety Critical Programming in C
  • 15. Unions  Storage  size of union is the size of its largest member  avoid unions with widely varying member sizes; for the larger data types, consider using pointers instead  Initialization  Union may only be initialized to a value appropriate for the type of its first member 15 CS 3090: Safety Critical Programming in C