This is not the document you are looking for? Use the search form below to find more!

Report home > Others

C Structures And Unions

0.00 (0 votes)
Document Description
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…
File Details
Submitter
  • Name: gabriel
Embed Code:

Add New Comment




Related Documents

C++ Questions and Answers

by: deepakbaba4all, 4 pages

C++ questions and Answers

Hepatitis C Treatment and Anemia

by: shayan, 3 pages

Hepatitis C Treatment and Anemia. Understanding Hemoglobin and Procrit / Epogen

Constructing High Performing Organisations - Building Blocks, Structures, And Culture

by: franciszka, 62 pages

CONSTRUCTING HIGH-PERFORMING ORGANISATIONS: Building Blocks, Structures, And Culture Case Study, Concepts and Debatable Ideas Kenny Ong CNI Holdings Berhad www.myCNI.com.my www.OOBEY.com ...

C:\Documents And Settings\User\Desktop\Microsoft Power Point Agranulocytic Series+Abnormal Wbc

by: fadheela, 36 pages

C:\Documents And Settings\User\Desktop\Microsoft Power Point Agranulocytic Series+Abnormal Wbc

C:\Documents And Settings\User\Desktop\Stomach Histology

by: benito, 32 pages

C:\Documents And Settings\User\Desktop\Stomach Histology

05211201 Advanced Data Structures And Algorithms

by: niklas, 7 pages

05211201 Advanced Data Structures And Algorithms

C:\documents and settings\carlinha\os meus documentos\social network mkt\para ler\social media and_customer_service_white_paper

by: ishaan, 9 pages

C:\documents and settings\carlinha\os meus documentos\social network mkt\para ler\social media and_customer_service_white_paper

Messerschmitt Bf 110 C, D and E: An Illustrated Study by Fernando Estanislau

by: ludwig, 2 pages

Messerschmitt Bf 110 C, D and E: An Illustrated Study by Fernando Estanislau I Love Books Like This... The Messerschmitt Bf 110 was the ...

Seismic design of earth-retaining structures and foundations

by: mersada, 9 pages

Earthquake-resistant design of earth retaining structures like retaining walls, earth dams and foundations are very important problems to minimize the devastating effect of earthquake hazards. In ...

Java vs. C/C++ - Efficiency and Speed Differences

by: jjbladester, 3 pages

Comparing Java vs. C/C++ Efficiency Differences to Interpersonal Differences

Content Preview
  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

Download
C Structures And Unions

 

 

Your download will begin in a moment.
If it doesn't, click here to try again.

Share C Structures And Unions to:

Insert your wordpress URL:

example:

http://myblog.wordpress.com/
or
http://myblog.com/

Share C Structures And Unions as:

From:

To:

Share C Structures And Unions.

Enter two words as shown below. If you cannot read the words, click the refresh icon.

loading

Share C Structures And Unions as:

Copy html code above and paste to your web page.

loading