Arrays and Pointers (part 2)

Slides:



Advertisements
Similar presentations
Chapter 7 Process Environment Chien-Chung Shen CIS, UD
Advertisements

Programming in C Pointers and Arrays, malloc( ). 7/28/092 Dynamic memory In Java, objects are created on the heap using reference variables and the new.
CSCI 171 Presentation 11 Pointers. Pointer Basics.
More Pointers Write a program that: –Calls a function to input an integer value –The above function calls another function that will double the input value.
2012 JANUARY Sun Mon Tue Wed Thu Fri Sat
What does this program do ? #include int main(int argc, char* argv[]) { int i; printf("%d arguments\n", argc); for(i = 0; i < argc; i++) printf(" %d: %s\n",
 2000 Prentice Hall, Inc. All rights reserved. Chapter 10 - Structures, Unions, Bit Manipulations, and Enumerations Outline 10.1Introduction 10.2Structure.
Command line arguments. – main can take two arguments conventionally called argc and argv. – Information regarding command line arguments are passed to.
CPT: Arrays of Pointers/ Computer Programming Techniques Semester 1, 1998 Objectives of these slides: –to illustrate the use of arrays.
0 Chap. 5 Pointers and Arrays 5.3Pointers and Arrays 5.4Address Arithmetic 5.5Character Pointers and Functions 5.6Pointer Arrays; Pointers to Pointers.
WORD JUMBLE. Months of the year Word in jumbled form e r r f b u y a Word in jumbled form e r r f b u y a february Click for the answer Next Question.
C Programming – Part 3 Arrays and Strings.  Collection of variables of the same type  Individual array elements are identified by an integer index 
2011 Calendar Important Dates/Events/Homework. SunSatFriThursWedTuesMon January
Arrays, Strings, and Memory. Command Line Arguments #include int main(int argc, char *argv[]) { int i; printf("Arg# Contents\n"); for (i = 0; i < argc;
Multi-dimensional Arrays and other Array Oddities Rudra Dutta CSC Spring 2007, Section 001.
Arrays and Pointers (part 2) CSE 2031 Fall March 2016.
July 2007 SundayMondayTuesdayWednesdayThursdayFridaySaturday
1 Array. 2 Outline Aggregate scalar data into larger data Pointers vs. Array Array subscript and pointer arithmetic Memory layout for array –Static vs.
1 Homework Continue with K&R Chapter 5 –Skipping sections for now –Not covering section 5.12 Continue on HW5.
Chapter 5 Pointers and Arrays Ku-Yaw Chang Assistant Professor, Department of Computer Science and Information Engineering Da-Yeh.
CSE 333 – SECTION 2 Memory Management. Questions, Comments, Concerns Do you have any? Exercises going ok? Lectures make sense? Homework 1 – START EARLY!
C Tutorial - Pointers CS 537 – Introduction to Operating Systems.
Chapter 7 Process Environment Chien-Chung Shen CIS/UD
Pointers to pointers & multi-dimensional arrays
Pointers verses Variables
Stack and Heap Memory Stack resident variables include:
C Primer.
Characters and Strings
Lecture 8 String 1. Concept of strings String and pointers
Command Line Arguments
Command Line Arguments
CSE 303 Concepts and Tools for Software Development
Command-Line Arguments
Module 2 Arrays and strings – example programs.
Programmazione I a.a. 2017/2018.
Pointers.
Arrays and Pointers CSE 2031 Fall September 2018.
CS111 Computer Programming
Programming Languages and Paradigms
Dynamic memory allocation and Intraprogram Communication
Dictation practice 2nd Form Ms. Micaela-Ms. Verónica.
14th September IIT Kanpur
Dynamic memory allocation and Intraprogram Communication
Command Line Arguments
McDonald’s Kalender 2009.
McDonald’s Kalender 2009.
C What you Know* Objective: To introduce some of the features of C. This assumes that you are familiar with C++ or java and concentrates on the features.
McDonald’s Kalender 2009.
Outline Defining and using Pointers Operations on pointers
Introduction to Problem Solving and Programming
CS111 Computer Programming
Lec 11.
McDonald’s calendar 2007.
7. Pointers, Dynamic Memory
Homework Continue with K&R Chapter 5 Skipping sections for now
EECE.2160 ECE Application Programming
Programming in C Pointers and Arrays.
Summary CSE 2031 Fall May 2019.
Introduction to C EECS May 2019.
C Programming - Lecture 5
Arrays and Pointers (part 2)
Arrays, Pointers, and Strings
Quick Review EECS May 2019.
Characters and Strings
McDonald’s calendar 2007.
15213 C Primer 17 September 2002.
SPL – PS2 C++ Memory Handling.
2015 January February March April May June July August September
Introduction to Problem Solving and Programming
Presentation transcript:

Arrays and Pointers (part 2) EECS 2031 31 May 2019

Be extra careful with pointers! Common errors: Overruns and underruns Occurs when you reference a memory beyond what you allocated. Uninitialized pointers Null pointers de-referencing Memory leaks Inappropriate use of freed memory Inappropriately freed memory

Uninitialized Pointers Example: int *p; *p = 20;

Null Pointer Dereferencing main( ) { int *x; x = ( int * )malloc( sizeof( int ) ); *x = 20; /* What could go wrong? */ } Better code: x = ( int * ) malloc( sizeof( int ) ); if ( !x ) { printf( “Insufficient memory!\n” ); exit( 1 ); *x = 20;

Memory Leaks int *x; x = (int *) malloc( 20 ); The first memory block is lost for ever. May cause problems (exhaust memory). int *x; x = (int *) malloc( 20 ); … … free( x ); x = (int *) malloc( 30 );

Inappropriate Use of Freed Memory char *x; x = (char *) malloc( 50 ); free( x ); x[0] = ‘A’; /* Does work on some systems though */

Arrays of Pointers (5.6) words is an array of pointers to char. char *words[] = { “apple”, “cherry”, “banana” }; words is an array of pointers to char. (char *)(words[]) Each element of words ( words[0], words[1], words[2]) is a pointer to char. words “apple” 1 2 “cherry” “banana”

Arrays vs. Pointers What is the difference between the previous example and the following? char words[][10] = { “apple”, “cherry”, “banana”};

Arrays of Pointers: Example char *words[] = { “apple”, “cherry”, “prune” }; char **p; p = words; printf("%c\n", **p); printf("%c\n",*(*(p+1)+2)); printf("%c\n",*(*(p+2)+2)+1); +1

Arrays vs. Pointers: Example

Pointers to Whole Arrays char a[10] = “banana”; char *p1; char (*p2)[10]; p1 = a; /* p1 points to first element*/ p2 = &a; /* p2 points to the whole array */ printf(“%c %c”, *p1, **p2); // What’s the difference between p1+1 and p2+1 ? // What’s char *p3[100] ? p1 points to A character. p2 points to an array of 100 characters. p3 is an array of 100 elements, each pointing to a char (an array of 100 pointers).

Pointers to Pointers (5.6) Pointers can point to integers, floats, chars, and other pointers. int **j; int *i; int k = 10; i = &k; j = &i; printf(“%d %d %d\n”, j, i, k); printf(“%d %d %d\n”, j, *j, **j); printf(“%x %x %x\n”, j, *j, **j); Output on some system: -1073744352 -1073744356 10 bffff620 bffff61c a

Multi-dimensional Arrays (5.7) int a[3][3]; To access the elements: if ( a[2][0] == 7 ) printf ( ... ); for ( i=0, j=0; ... ; i++, j++ ) a[i][j] = i+j; int a[3][3] = { {1,2,3}, {4,5,6}, {7,8,9}}; int a[ ][ ] = { {1,2,3}, {4,5,6}, {7,8,9}}; int a[ ][3] = { {1,2,3}, {4,5,6}, {7,8,9}};

Multi-dimensional Arrays (cont.) Multi-dimensional arrays are arrays of arrays. For the previous example, a[0] is a pointer to the first row. Lay out in memory a[0] a[1] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1]

Multi-dimensional Arrays: Example #include <stdio.h> int main() { float *pf; float m[][3]={{0.1, 0.2, 0.3}, {0.4, 0.5, 0.6}, {0.7, 0.8, 0.9}}; printf("%d \n", sizeof(m)); pf = m[1]; printf("%f %f %f \n",*pf, *(pf+1), *(pf+2)); } 36 0.4000 0.5000 0.6000

Multi-D Arrays in Function Declarations int a[2][13]; // to be passed to function f f( int daytab[2][13] ) { ... } or f( int daytab[ ][13] ) { ... } f( int (*daytab)[13] ) { ... } Note: Only to the first dimension (subscript) of an array is free; all the others have to be specified.

Initialization of Pointer Arrays (5.8) /* month_name: return name of n-th month */ char *month_name( int n ) { static char *name[] = { "Illegal month", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; return (n < 1 || n > 12) ? name[0] : name[n]; }

Pointers vs. Multi-D Arrays (5.9) int a[10][20]; int *b[10]; a: 200 int-size locations have been set aside. b: only 10 pointers are allocated and not initialized; initialization must be done explicitly. Assuming each element of b points to an array of 20 elements, total size = 200 integers + 10 pointers. Advantage of b: the rows of the array may be of different lengths (saving space).

Uninitialized Pointers (cont.) Example 1 int *p; *p = 20; Example 2 main() { char *x[10]; strcpy( x[1],”Hello” ); }

Advantage of Pointer Arrays char *name[ ] = { "Illegal month", "Jan", "Feb", "Mar" }; char aname[ ][15] = {"Illegal month", "Jan", "Feb", "Mar" };

Command-Line Arguments (5.10) Up to now, we define main as main(). Usually it is defined as main( int argc, char *argv[] ) argc is the number of arguments. argv is a pointer to the array containing the arguments. argv[0] is a pointer to a string with the program name. So argc is at least 1. argv[argc] is a NULL pointer.

Command-Line Arguments (cont.) main( int argc, char *argv[] ) { int i; printf( “Number of arg = %d\n“, argc ); for( i = 0; i < argc; i++ ) printf( “%s\n”, argv[i] ); } a.out hi by 3 Number of arg = 4 a.out hi by 3 a.out Number of arg = 1

Example Write a program name echo (echo.c) which echoes its command-line arguments on a single line, separated by blanks. Command: echo hello, world Output: hello, world

Example: Diagram Write a program name echo (echo.c) which echoes its command-line arguments on a single line, separated by blanks. Command: echo hello, world Output: hello, world

echo, 1st Version main( int argc, char *argv[] ) { int i; for (i = 1; i < argc; i++) printf("%s%s", argv[i], (i < argc-1) ? " " : ""); printf("\n"); return 0; }

echo, 2nd Version main( int argc, char *argv[] ) { while (--argc > 0) printf("%s%s", *++argv, (argc > 1) ? " " : ""); printf("\n"); return 0; } Lab question: write program to do “add 15 20 35 10”

Complicated Declarations (5.12) char **argv int (*daytab)[13] int *daytab[13] int *comp() argv: pointer to pointer to char daytab: pointer to array[13] of int daytab: array[13] of pointer to int comp: function returning pointer to int

Next time ... Program structure (chapter 4) Introduction to UNIX (posted notes)