Structures EECS 2031 1 July 2019.

Slides:



Advertisements
Similar presentations
LIST PROCESSING.
Advertisements

Computer Programming for Engineering Applications ECE 175 Intro to Programming.
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.
Chapter 6 Structures By C. Shing ITEC Dept Radford University.
David Notkin Autumn 2009 CSE303 Lecture 13 This space for rent.
Structures A structure is a collection of one or more variables, possibly of different types, grouped together under a single name for convenient handling.
CSCI 171 Presentation 11 Pointers. Pointer Basics.
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 + malloc +
CS113 Introduction to C Instructor: Ioannis A. Vetsikas Lecture 7 : September 8.
Memory allocation CSE 2451 Matt Boggus. sizeof The sizeof unary operator will return the number of bytes reserved for a variable or data type. Determine:
Winter2015 COMP 2130 Intro Computer Systems Computing Science Thompson Rivers University C: Advanced Topics.
Pointers Chapters 6+9 in ABC. abp 12 int a = 1, b = 2, *p; & - reference operator (address) * - dereference operator (value) p = &a; // *p is now 1 abp.
ISP - 2 nd Recitation Functions Pointers Structs Files Code Examples Homework!
17. ADVANCED USES OF POINTERS. Dynamic Storage Allocation Many programs require dynamic storage allocation: the ability to allocate storage as needed.
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.
Computer Organization and Design Pointers, Arrays and Strings in C Montek Singh Sep 18, 2015 Lab 5 supplement.
ECE Application Programming Instructors: Dr. Michael Geiger & Nasibeh Nasiri Fall 2015 Lecture 31: Structures (cont.) Dynamic memory allocation.
EEL 3801 C++ as an Enhancement of C. EEL 3801 – Lotzi Bölöni Comments  Can be done with // at the start of the commented line.  The end-of-line terminates.
Digital Computer Concept and Practice Copyright ©2012 by Jaejin Lee C Language Part 5.
Advanced Pointer Topics. Pointers to Pointers u A pointer variable is a variable that takes some memory address as its value. Therefore, you can have.
ENEE150 – 0102 ANDREW GOFFIN Dynamic Memory. Dynamic vs Static Allocation Dynamic  On the heap  Amount of memory chosen at runtime  Can change allocated.
MORE POINTERS Plus: Memory Allocation Heap versus Stack.
Structures CSE 2031 Fall March Basics of Structures (6.1) struct point { int x; int y; }; keyword struct introduces a structure declaration.
Chapter 6 Structures Ku-Yaw Chang Assistant Professor, Department of Computer Science and Information Engineering Da-Yeh University.
C Tutorial - Pointers CS 537 – Introduction to Operating Systems.
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)
Arrays and Pointers (part 1) CSE 2031 Fall July 2016.
CSC 215 Pointers and Arrays. Pointers C provides two unary operators, & and *, for manipulating data using pointers The operator &, when applied to a.
Linked Lists Source: presentation based on notes written by R.Kay, A. Hill and C.Noble ● Lists in general ● Lists indexed using pointer arrays ● Singly.
Lecture 5 Pointers 1. Variable, memory location, address, value
C Structures and Memory Allocation
Computer Organization and Design Pointers, Arrays and Strings in C
Lesson #8 Structures Linked Lists Command Line Arguments.
Dynamic Allocation Review Structure and list processing
Linked List :: Basic Concepts
5.13 Recursion Recursive functions Functions that call themselves
C Programming Tutorial – Part I
Pointers Department of Computer Science-BGU יום שלישי 31 יולי 2018.
Module 2 Arrays and strings – example programs.
Computer science C programming language Lesson 5
Introduction to Data Structures
Lecture 6 C++ Programming
Some examples.
14th September IIT Kanpur
Homework / Exam Continuing K&R Chapter 6 Exam 2 after next class
Lecture 9 Structure 1. Concepts of structure Pointers of structures
LINKED LISTS.
Programming in C Pointer Basics.
Pointers Department of Computer Science-BGU יום רביעי 21 נובמבר 2018.
Lists, Strings & Multi-dimensional arrays
Programming in C Pointer Basics.
CS1100 Computational Engineering
EECE.2160 ECE Application Programming
Review & Lab assignments
Outline Defining and using Pointers Operations on pointers
Programming in C Pointer Basics.
Chapter: 7-12 Final exam review.
Introduction to Problem Solving and Programming
CS111 Computer Programming
Pointers Lecture 2 Tue, Jan 24, 2006.
Linked List.
Homework Continuing K&R Chapter 6.
Structures CSE 2031 Fall February 2019.
Programming Language C Language.
Structures.
Structures CSE 2031 Fall April 2019.
Structures CSE 2031 Fall May 2019.
CS1100 Computational Engineering
C Structures and Memory Allocation
Presentation transcript:

Structures EECS 2031 1 July 2019

Basics of Structures (6.1) struct point { int x; int y; }; keyword struct introduces a structure declaration. point: structure tag x, y: members The same member names may occur in different structures. Now struct point is a valid type. Defining struct variables: struct point pt; struct point maxpt = {320, 200}; A struct declaration defines a type. struct { ... } a, b, c; or struct point a,b,c; is syntactically analogous to int a, b, c;

Using Structures Members are accessed using operator “.” structure-name.member struct point pt; printf(“%d,%d", pt.x, pt.y); double sqrt(double); /* function prototype */ double dist = sqrt((double)pt.x * pt.x + (double)pt.y * pt.y);

Structure Name Space Structure and members names have their own name space separate from variables and functions. struct point point; struct point { int x; int y; } x; /* Both are valid but not recommended. */

Nested Structures struct rectng { struct point pt1; struct point pt2; }; struct rectng screen; screen.pt1.x = 1; screen.pt1.y = 2; screen.pt2.x = 8; screen.pt2.y = 7;

Structures and Functions (6.2) Returning a structure from a function. /* makepoint: make a point from x and y components */ struct point makepoint( int x, int y ) { struct point temp; temp.x = x; temp.y = y; return temp; } struct rectng screen; struct point middle; struct point makepoint( int, int ); screen.pt1 = makepoint( 0, 0 ); screen.pt2 = makepoint( XMAX, YMAX ); middle = makepoint( (screen.pt1.x + screen.pt2.x)/2, (screen.pt1.y + screen.pt2.y)/2 );

Structures and Functions (cont.) Passing structure arguments to functions: structure parameters are passed by values like int, char, float, etc. A copy of the structure is sent to the function. /* addpoints: add two points */ struct point addpoint( struct point p1, struct point p2 ) { p1.x += p2.x; p1.y += p2.y; return p1; } Note: the components in p1 are incremented rather than using an explicit temporary variable to emphasize that structure parameters are passed by value like any others (no changes to original struct).

Pointers to Structures 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. struct point *pp; struct point origin = makepoint( 0, 0 ); pp = &origin; printf("origin is (%d,%d)\n", (*pp).x, (*pp).y); Note: *pp.x means *(pp.x), which is illegal (why?)

Precedence and Associativity

Pointers to Structures: Example /* addpoints: add two points */ struct point addpoint (struct point *p1, struct point *p2) { struct point temp; temp.x = (*p1).x + (*p2).x; temp.y = (*p1).y + (*p2).y; return temp; } main() { struct point a, b, c; /* Input or initialize structures a and b */ c = addpoint( &a, &b );

Pointers to Structures: Shorthand (*pp).x can be written as pp->x printf("origin is (%d,%d)\n", pp->x, pp->y); struct rect r, *rp = &r; r.pt1.x = 1; rp->pt1.x = 2; (r.pt1).x = 3; (rp->pt1).x = 4; Note: Both . and -> associate from left to right.

malloc() pointer = (type *) malloc (no_of_elements * sizeof (element)) double *pd; pd = (double *) malloc(sizeof(double)); int *pi; pi = (int *) malloc(sizeof(int)); free ( pi ); pi = (int *) malloc(10 * sizeof(int)); char *str; str = (char *) malloc(MAXSIZE * sizeof(char));

Arrays of Structures (6.3) struct dimension { float width; float height; }; struct dimension chairs[12]; struct dimension *tables; tables = (struct dimension *) malloc (20 * sizeoff(struct dimension));

Initializing Structures struct dimension sofa = {2.0, 3.0}; struct dimension chairs[] = { {1.4, 2.0}, {0.3, 1.0}, {2.3, 2.0} };

Arrays of Structures: Example struct key { char *word; int count; }; struct key keytab[NKEYS]; struct key *p; for (p = keytab; p < keytab + NKEYS; p++) printf("%4d %s\n", p->count, p->word); struct key { char *word; int count; } keytab[] = { "auto", 0, "break", 0, "case", 0, "char", 0, "const", 0, "continue", 0, "default", 0, /* ... */ "unsigned", 0, "void", 0, "volatile", 0, "while", 0 };

Pointers to Structures (6.4) struct key keytab[NKEYS]; struct key *p; for (p = keytab; p < keytab + NKEYS; p++) printf("%4d %s\n", p->count, p->word); p++ increments p by the correct amount (i.e., structure size) to get the next element of the array of structures. struct { char c; /* one byte */ int i; /* four bytes */ }; What is the total structure size? Use the sizeof operator to get the correct structure size.

Self-referential Structures (6.5) Example: (singly) linked list struct list { int data; struct list *next; }; 3

Linked List Pointer head points to the first element Last element pointer is NULL Example (next slide): build a linked list with data being non-negative integers, then search for a number. Insertion at the end (rear) of the list. We also learn how to dynamically allocate a structure. head -1 10 6 NULL

Linked List Implementation #include <stdio.h> #include <stdlib.h> main() { struct list { int data; struct list *next; } *head, *p, *last; int i; /* Create a dummy node, which simplifies insertion and deletion */ head = (struct list *) malloc ( sizeof( struct list ) ); head─>data = -1; head─>next = NULL; last = head; scanf( “%d”, &i ); /* input 1st element */ while( i >= 0 ) { p = (struct list *) malloc( sizeof( struct list ) ); p─>data = i; p─>next = NULL; last─>next = p; last = p; scanf( “%d”, &i ); } /* while */ printf(“Enter the number to search for “); for( p = head; p != NULL; p = p─>next ) if( p─>data == i ) printf( "FOUND %d \n“, i ); } /* main */

Pointers to Structures: More Examples The operators . and -> along with ( ) and [ ] have the highest precedence and thus bind very tightly.

Example 1 ++p->len (++p)->len (p++)->len

Example 2

typedef (6.7) For creating new data type names typedef int Length; Length len, maxlen; Length *lengths[]; typedef char *String; String p, lineptr[MAXLINES]; p = (String) malloc(100); int strcmp(String, String);

typedef with struct We can define a new type and use it later typedef struct { int x,y; float z; } mynewtype; mynewtype a, b, c, x; Now, mynewtype is a type in C just like int or float.

Self-referential Structures: More Examples Binary trees (6.5) Hash tables (6.6) To be covered later if time permits.

Reminders Lab test 1 (Oct. 21 and 24) Midterm (Oct. 31) Next lecture: Pointers part 2