Structures, Unions, and Typedefs CS-2303, C-Term 20101 Structures, Unions, and Typedefs CS-2303 System Programming Concepts (Slides include materials from.

Slides:



Advertisements
Similar presentations
Programming in C Chapter 10 Structures and Unions
Advertisements

C Structures and Memory Allocation There is no class in C, but we may still want non- homogenous structures –So, we use the struct construct struct for.
Unions The storage referenced by a union variable can hold data of different types subject to the restriction that at any one time, the storage holds data.
Prof. Necula CS 164 Lecture 141 Run-time Environments Lecture 8.
Structures, Unions, and Typedefs CIS 1057 Fall Structures, Unions, and Typedefs CIS 1057 Computer Programming in C Fall 2013 (Many slides based on/borrowed.
Linked Lists in C and C++ CS-2303, C-Term Linked Lists in C and C++ CS-2303 System Programming Concepts (Slides include materials from The C Programming.
ECE 353: Lab C Pointers and Structs. Basics A pointer holds an address to some variable Notation: – Dereferencing operator: * int *x is a declaration.
Stacks and HeapsCS-3013 A-term A Short Digression on Stacks and Heaps CS-3013 Operating Systems A-term 2008 (Slides include materials from Modern.
Numerical Computation Review and Continuation CS-2301, B-Term Numerical Computation in C Review and Continuation CS-2301, System Programming for.
Arrays in C & C++CS-2303, C-Term Arrays in C & C++ (including a brief introduction to pointers) CS-2303 System Programming Concepts (Slides include.
Digression on Stack and Heaps CS-502 (EMC) Fall A Short Digression on Stacks and Heaps CS-502, Operating Systems Fall 2009 (EMC) (Slides include.
Structures, Unions, and Typedefs CS-2301 D-term Structures, Unions, and Typedefs CS-2301 System Programming D-term 2009 (Slides include materials.
Differences between Java and C CS-2303, C-Term Differences between Java and C CS-2303, System Programming Concepts (Slides include materials from.
CS 536 Spring Run-time organization Lecture 19.
C and Data Structures Baojian Hua
Review of Exam #2CS-2301, B-Term Review of Exam #2 CS-2301, System Programming for Non-Majors (Slides include materials from The C Programming Language,
"Loose ends"CS-2301 D-term “Loose Ends” CS-2301 System Programming C-term 2009 (Slides include materials from The C Programming Language, 2 nd edition,
More on Numerical Computation CS-2301 B-term More on Numerical Computation CS-2301, System Programming for Non-majors (Slides include materials from.
C structures and unions (Reek, Ch. 10) 1CS 3090: Safety Critical Programming in C.
More on Operator Overloading CS-2303, C-Term More on Operator Overloading CS-2303 System Programming Concepts (Slides include materials from The.
Structures and UnionsCS-2301 B-term Structures and Unions CS-2301, System Programming for Non-majors (Slides include materials from The C Programming.
Accessing Files in CCS-2303, C-Term Accessing Files in C CS-2303 System Programming Concepts (Slides include materials from The C Programming Language,
More about Numerical Computation CS-2301, B-Term More about Numerical Computation CS-2301, System Programming for Non-Majors (Slides include materials.
Stacks and HeapsCS-502 Fall A Short Digression Stacks and Heaps CS-502, Operating Systems Fall 2007 (Slides include materials from Operating System.
 2006 Pearson Education, Inc. All rights reserved. Templates (again)CS-2303, C-Term Templates (again) CS-2303 System Programming Concepts (Slides.
Introduction to Classes and Objects CS-2303, C-Term Introduction to Classes and Objects CS-2303 System Programming Concepts (Slides include materials.
CS-2303 System Programming Concepts
Recursion and Implementation of Functions
Data Structures — Lists and Trees CS-2301, B-Term Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.
Operator OverloadingCS-2303, C-Term Operator Overloading CS-2303 System Programming Concepts (Slides include materials from The C Programming Language,
S-1 University of Washington Computer Programming I Lecture 18: Structures © 2000 UW CSE.
Engineering Computing I Chapter 6 Structures. Sgtructures  A structure is a collection of one or more variables, possibly of different types, grouped.
1 Homework HW6 due class 22 K&R 6.6 K&R 5.7 – 5.9 (skipped earlier) Finishing up K&R Chapter 6.
1 C++ Syntax and Semantics, and the Program Development Process.
Learners Support Publications Classes and Objects.
Week 9 - Monday.  What did we talk about last time?  Time  GDB.
1 Data Structures CSCI 132, Spring 2014 Lecture 10 Dynamic Memory and Pointers.
1 Pointers to structs. 2 A pointer to a struct is used in the same way as a pointer to a simple type, such as an int. Pointers to structs were introduced.
1 6.1 Basics of Structures 6.2 Structures and Functions 6.3 Arrays of Structures 6.4 Pointers to Structures 6.5 Self-referential Structures + Linked List.
Homework Finishing up K&R Chapter 6 today Also, K&R 5.7 – 5.9 (skipped earlier)
1 Chapter 2 C++ Syntax and Semantics, and the Program Development Process.
Chapter 13: Structures. In this chapter you will learn about: – Single structures – Arrays of structures – Structures as function arguments – Linked lists.
CMPSC 16 Problem Solving with Computers I Spring 2014 Instructor: Lucas Bang Lecture 13: Data structures in C.
APS105 Lists. Structures Arrays allow a collection of elements –All of the same type How to collect elements of different types? –Structures; in C: struct.
MT311 Java Application Development and Programming Languages Li Tak Sing ( 李德成 )
+ Structures and Unions. + Introduction We have seen that arrays can be used to represent a group of data items that belong to the same type, such as.
ICOM 4035 – Data Structures Dr. Manuel Rodríguez Martínez Electrical and Computer Engineering Department Lecture 2 – August 23, 2001.
Programming in C Arrays, Structs and Strings. 7/28/092 Arrays An array is a collection of individual data elements that is:An array is a collection of.
Digital Computer Concept and Practice Copyright ©2012 by Jaejin Lee C Language Part 5.
Introduction to Computers and Programming Class 24 Structures (structs) Professor Avi Rosenfeld.
Programming in C Arrays, Structs and Strings. 7/28/092 Arrays An array is a collection of individual data elements that is:An array is a collection of.
1 11/30/05CS150 Introduction to Computer Science 1 Structs.
ENEE150 – 0102 ANDREW GOFFIN Abstract Data Types.
Chapter 1: Preliminaries Lecture # 2. Chapter 1: Preliminaries Reasons for Studying Concepts of Programming Languages Programming Domains Language Evaluation.
1 Structures & Unions. 2 User-Defined Types C provides facilities to define one’s own types. These may be a composite of basic types ( int, double, etc)
Chapter 10-1: Structure.
CSE 374 Programming Concepts & Tools
Run-time organization
Advanced Programming Basics
CS 240 – Lecture 18 Command-line Arguments, Typedef, Union, Bit Fields, Pointers to Functions.
Classes and Objects.
Miscellaneous C++ Topics
Dynamic Memory Allocation (and Multi-Dimensional Arrays)
Structures, Unions, and Typedefs
Linked Lists in C and C++
Introduction C is a general-purpose, high-level language that was originally developed by Dennis M. Ritchie to develop the UNIX operating system at Bell.
Polymorphism Professor Hugh C. Lauer CS-2303, System Programming Concepts (Slides include materials from The C Programming Language, 2nd edition, by Kernighan.
Structures, Unions, and Enumerations
Programming Fundamental
Week 9 - Monday CS222.
Presentation transcript:

Structures, Unions, and Typedefs CS-2303, C-Term Structures, Unions, and Typedefs CS-2303 System Programming Concepts (Slides include materials from The C Programming Language, 2 nd edition, by Kernighan and Ritchie and from C: How to Program, 5 th and 6 th editions, by Deitel and Deitel)

Structures, Unions, and Typedefs CS-2303, C-Term Reading Assignment Chapter 6 of Kernighan & Ritchie Chapter 10 of Deitel & Deitel

Structures, Unions, and Typedefs CS-2303, C-Term Structures and Unions The last major language facility in C to be introduced in this course. Essential for building up “interesting” data structures — e.g., Data structures of multiple values of different kinds Data structures of indeterminate size

Structures, Unions, and Typedefs CS-2303, C-Term Definition — Structure A collection of one or more variables, typically of different types, grouped together under a single name for convenient handling Known as struct in C and C++ Like a class in Java but with no methods In C++, a struct is a class with no methods

Structures, Unions, and Typedefs CS-2303, C-Term struct Defines a new type I.e., a new kind of data type that compiler regards as a unit E.g., struct motor { float volts; //voltage of the motor float amps; //amperage of the motor int phases; //# of phases of the motor float rpm; //rotational speed of motor }; //struct motor

Structures, Unions, and Typedefs CS-2303, C-Term struct Defines a new type E.g., struct motor { float volts; float amps; int phases; float rpm; }; //struct motor Name of the type Note:– name of type is optional if you are just declaring a single struct (middle p. 128 of K&R)

Structures, Unions, and Typedefs CS-2303, C-Term struct Defines a new type E.g., struct motor { float volts; float amps; int phases; float rpm; }; //struct motor Members of the struct A member of a struct is analogous to a field of a class in Java

Structures, Unions, and Typedefs CS-2303, C-Term Declaring struct variables struct motor p, q, r; Declares and sets aside storage for three variables – p, q, and r – each of type struct motor struct motor M[25]; Declares a 25-element array of struct motor ; allocates 25 units of storage, each one big enough to hold the data of one motor struct motor *m; Declares a pointer to an object of type struct motor

Structures, Unions, and Typedefs CS-2303, C-Term Accessing Members of a struct Let struct motor p; struct motor q[10]; Then p.volts — is the voltage p.amps — is the amperage p.phases — is the number of phases p.rpm — is the rotational speed q[i].volts — is the voltage of the i th motor q[i].rpm — is the speed of the i th motor Like Java!

Structures, Unions, and Typedefs CS-2303, C-Term Accessing Members of a struct (continued) Let struct motor *p; Then (*p).volts — is the voltage of the motor pointed to by p (*p).phases — is the number of phases of the motor pointed to by p Why the parentheses?

Structures, Unions, and Typedefs CS-2303, C-Term Accessing Members of a struct (continued) Let struct motor *p; Then (*p).volts — is the voltage of the motor pointed to by p (*p).phases — is the number of phases of the motor pointed to by p Because '.' operator has higher precedence than unary '*'

Structures, Unions, and Typedefs CS-2303, C-Term Accessing Members of a struct (continued) Let struct motor *p; Then (*p).volts — is the voltage of the motor pointed to by p (*p).phases — is the number of phases of the motor pointed to by p Reason:– you really want the expression m.volts * m.amps to mean what you think it should mean!

Structures, Unions, and Typedefs CS-2303, C-Term Accessing Members of a struct (continued) The (*p).member notation is a nuisance Clumsy to type; need to match ( ) Too many keystrokes This construct is so widely used that a special notation was invented, i.e., –p->member, where p is a pointer to the structure Ubiquitous in C and C++

Structures, Unions, and Typedefs CS-2303, C-Term Previous Example Becomes … Let struct motor *p; Then p -> volts — is the voltage of the motor pointed to by p p -> phases — is the number of phases of the motor pointed to by p

Structures, Unions, and Typedefs CS-2303, C-Term Operations on struct Copy/assign struct motor p, q; p = q; Get address struct motor p; struct motor *s s = &p; Access members p.volts; s -> amps;

Structures, Unions, and Typedefs CS-2303, C-Term Operations on struct (continued) Remember:– –Passing an argument by value is an instance of copying or assignment –Passing a return value from a function to the caller is an instance of copying or assignment E.g,:– struct motor f(struct motor g) { struct motor h = g;...; return h; }

Structures, Unions, and Typedefs CS-2303, C-Term Assigning to a struct K & R say (p. 131) –“If a large structure is to be passed to a function, it is generally more efficient to pass a pointer than to copy the whole structure” I disagree:– –Copying is very fast on modern computers –Creating an object with malloc() and assigning a pointer is not as fast –Esp. if you want the object passed or returned by value –In real life situations, it is a judgment call

Structures, Unions, and Typedefs CS-2303, C-Term Initialization of a struct Let struct motor { float volts; float amps; int phases; float rpm; }; //struct motor Then struct motor m = {208, 20, 3, 1800}; initializes the struct See also p. 133 of K&R for initializing arrays of structs C99 introduces a new way of initializing a struct – truly ugly!

Structures, Unions, and Typedefs CS-2303, C-Term Why structs ? Open-ended data structures –E.g., structures that may grow during processing –Avoids the need for realloc() and a lot of copying Self-referential data structures –Lists, trees, etc.

Structures, Unions, and Typedefs CS-2303, C-Term Example struct item { char *s; struct item *next; } I.e., an item can point to another item … which can point to another item … which can point to yet another item … etc. Thereby forming a list of items Yes! This is legal!

Structures, Unions, and Typedefs CS-2303, C-Term A note about structs and pointers The following is legal:– /* in a.c or.h file */ struct item; struct item *p, *q; … /* In another file */ struct item { int member1; float member2; struct item *member3; }; Called an opaque type! Program can use pointers to items but cannot see into items. Cannot define any items, cannot malloc any items, etc. Implementer of item can change the definition without forcing users of pointers to change their code!

Structures, Unions, and Typedefs CS-2303, C-Term Another note about structs The following is not legal:– struct motor { float volts; float amps; float rpm; unsigned int phases; };//struct motor motor m; motor *p; You must write struct motor m; struct motor *p;

Structures, Unions, and Typedefs CS-2303, C-Term Typedef Definition:– a typedef is a way of renaming a type –See §6.7 E.g., typedef struct motor Motor; Motor m, n; Motor *p, r[25]; Motor function(const Motor m; …); E.g., typedef, lets you leave out the word “ struct ”

Structures, Unions, and Typedefs CS-2303, C-Term typedef (continued) typedef may be used to rename any type –Convenience in naming –Clarifies purpose of the type –Cleaner, more readable code –Portability across platforms E.g., –typedef char *String; E.g., –typedef int size_t; –typedef long int32; –typedef long long int64;

Structures, Unions, and Typedefs CS-2303, C-Term typedef (continued) typedef may be used to rename any type –Convenience in naming –Clarifies purpose of the type –Cleaner, more readable code –Portability across platforms E.g., –typedef char *String; E.g., –typedef int size_t; –typedef long int32; –typedef long long int64; These three may change from platform to platform Defined once in a.h file! Very common in C and C++ Esp. for portable code!

Structures, Unions, and Typedefs CS-2303, C-Term Revisit note about structs and pointers The following is legal:– /* in a.c or.h file */ typedef struct _item Item; Item *p, *q; … /* In another file */ struct _item { char *info; Item *nextItem; };

Structures, Unions, and Typedefs CS-2303, C-Term Questions about structs and pointers?

Structures, Unions, and Typedefs CS-2303, C-Term Unions A union is like a struct, but only one of its members is stored, not all I.e., a single variable may hold different types at different times Storage is enough to hold largest member Members are overlaid on top of each other E.g., union { int ival; float fval; char *sval; } u;

Structures, Unions, and Typedefs CS-2303, C-Term Unions (continued) It is programmer’s responsibility to keep track of which type is stored in a union at any given time! E.g., (p. 148) struct taggedItem { enum {iType, fType, cType} tag; union { int ival; float fval; char *sval; } u; };

Structures, Unions, and Typedefs CS-2303, C-Term Unions (continued) It is programmer’s responsibility to keep track of which type is stored in a union at any given time! E.g., (p. 148) struct taggedItem { enum {iType, fType, cType} tag; union { int ival; float fval; char *sval; } u; }; Members of struct are:– enum tag; union u; Value of tag says which member of u to use

Structures, Unions, and Typedefs CS-2303, C-Term Unions (continued) unions are used much less frequently than structs — mostly in the inner details of operating system in device drivers in embedded systems where you have to access registers defined by the hardware

Structures, Unions, and Typedefs CS-2303, C-Term Questions?