L25 Unions and Typedefs

L25 Unions and Typedefs

Binghamton CS-211 University Fall 2015 Unions and Typedefs 1 Binghamton CS-211 University Fall 2015 Symbol Table • A symbol table consists of several pieces of information NAME TYPE VALUE X INT 13 Y INT 0 DIST FLOAT 12.87 FIRST_INIT CHAR ‘T’ SSN LONG INT 222 22 2222 2 Binghamton CS-211 University Fall 2015 Symbol Table Structure struct symbol { char name[256]; enum typ { t_int,t_float,t_char,t_long_int} type; ?????? value; } symbolTable[100]; What type of data should value be? 3 Binghamton CS-211 University Fall 2015 Symbol Table Structure struct symbol { char name[256]; enum typ { t_int,t_float,t_char,t_long_int} type; int intValue; float floatValue; Why reserve space for each of these? char charValue; We will only use one value for each symbol! long int liValue; } symbolTable[100]; 4 Binghamton CS-211 University Fall 2015 Example Union union val_union { int i; float f; char c; long int li; }; 5 Binghamton CS-211 University Fall 2015 Anatomy of a Union Type Name union val_union { int i; float f; Members or Fields char c; long int li; }; • Like structures or enums, this defines a new data type • Like structures, contains a list of sub-fields • Unlike structures, all sub-fields occupy the same memory 6 Binghamton CS-211 University Fall 2015 Instance of a union Type Name union val_union value; Variable… • Referencing a union instance: Instance of value.i=13; val_union or value.f=12.87; • Like structures – reference fields using union name . field • Like structures, field names are NOT variable names 7 Binghamton CS-211 University Fall 2015 Union Instances in Memory • All fields start at the same place • Entire Union is large enough to hold the largest field Value.c Value.li Value.f Value.i 8 Binghamton CS-211 University Fall 2015 Using Unions to Look at Internals xmp.b[0] xmp.b[1] xmp.b[2] xmp.b[3] union { int i; xmp.i char b[4]; } xmp; xmp.i=347; printf(“347 is represented as %2x %2x %2x %2x\n”, xmp.b[0],xmp.b[1],xmp.b[2],xmp.b[3]); 347 is represented as 5B 01 00 00 9 Binghamton CS-211 University Fall 2015 Pointers to Unions • Like structures, we can use -> pointer notation to access fields union val_union * vptr; vptr=(union val_union*)malloc(sizeof(union val_union)); vptr->c=‘T’; … if (vptr->c==‘X’) printf(“Hi Xavier”); free(vptr); 10 Binghamton CS-211 University Fall 2015 Symbol Table Structure struct symbol { char name[256]; enum typ { t_int,t_float,t_char,t_long_int} type; union val_union value; } st[100]; … if (st[i].type==t_float) printf(“%s=%f\n”,st[i].name, st[i].value.f); 11 Binghamton CS-211 University Fall 2015 Defining New Types • Built in types: char, int, float, short int, long int, double, etc. • Arrays – extended types • Pointers – extended types • Derived types: structures, enums, unions • Must include “struct lnode” or “union val_union” 12 Binghamton CS-211 University Fall 2015 Derived Types can get Complicated • struct lnode* nodeList[10]; • nodelist is an array of 10 pointers to lnode structures • union val_union **vptrs; • vptrs is a pointer to one or more pointers to one or more instances of a val_union union 13 Binghamton CS-211 University Fall 2015 TypeDef… Synonym for Any Type typedef struct lnode * nodeptr; nodeptr head; nodeptr newNode=makeLnode(12); 14 Binghamton CS-211 University Fall 2015 Anatomy of a Typedef typedef struct lnode * nodeptr; New Type Name Built-In or Derived (Synonym) Type Name 15 Binghamton CS-211 University Fall 2015 Why TypeDef 1. Makes code much more readable • It’s much clearer to read an write “nodeptr” than “struct lnode *” 2. Improves portability of code typedef float length_t; length_t aToB; length_t bToC; … Make this “double” to change all lengths! 16 Binghamton CS-211 University Fall 2015 Resources • Programming in C, Chapter 16 (Working with Unions) • Wikipedia Union Type https://en.wikipedia.org/wiki/Union_type • Wikipedia Typedef https://en.wikipedia.org/wiki/Typedef 17.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    17 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us