Chapter 17 Pointers and Arrays. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 17-2 Pointers and Arrays.

Slides:



Advertisements
Similar presentations
Chapter 16 Pointers and Arrays. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Pointers and Arrays.
Advertisements

1 Chapter Thirteen Pointers. 2 Pointers A pointer is a sign used to point out the direction.
Programming and Data Structure
What is a pointer? First of all, it is a variable, just like other variables you studied So it has type, storage etc. Difference: it can only store the.
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.
Engineering Problem Solving with C Fundamental Concepts Chapter 6 Pointers.
Kernighan/Ritchie: Kelley/Pohl:
Engineering Problem Solving With C++ An Object Based Approach Chapter 9 Pointers and Creating Data Structures.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 10: Pointers by.
Chapter 17 Recursion. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Mathematical Definition: RunningSum(1)
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Copyright 2004 Scott/Jones Publishing Starting Out with C++: Early.
Pointers A pointer is a variable that contains memory address as its value. A variable directly contains a specific value. A pointer contains an address.
Starting out with C++1 Chapter 9 – Pointers Getting the address of a Variable Why do we have pointers? Indirection – difference between –Will you go out.
Overview Projects – Project 1’s Project 2’s no later than Dec 14th Homework Problem – 14.X Pointer Variables Pass by Value Pass by Reference (or by Pointer)
Chapter 8. 2 Objectives You should be able to describe: One-Dimensional Arrays Array Initialization Arrays as Arguments Two-Dimensional Arrays Common.
Overview C programming Environment C Global Variables C Local Variables Memory Map for a C Function C Activation Records Example Compilation.
Chapter 6 C Arrays Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education Inc. Arrays are data structures.
Even More C Programming Pointers. Names and Addresses every variable has a location in memory. This memory location is uniquely determined by a memory.
Overview Pointer Variables Pass by Value Pass by Reference (or by Pointer) Arrays.
1 Chapter 9 Pointers. 2 Topics 8.1 Getting the Address of a Variable 8.2 Pointer Variables 8.3 Relationship Between Arrays and Pointers 8.4 Pointer Arithmetic.
 2007 Pearson Education, Inc. All rights reserved C Arrays.
C Stack Frames / Pointer variables Stack: Local Variables Pass & Return values Frame Ptr linkage (R5) and PC linkage (R7) Pointer Variables: Defining &
Programming Pointers. Variables in Memory x i c The compiler determines where variables are placed in memory This placement cannot.
Chapter 18 I/O in C. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Standard C Library I/O commands.
Chapter 14 Functions. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Function Smaller, simpler, subcomponent.
CMPE13Cyrus Bazeghi Chapter 14 Functions in C. CMPE13 2 Functions Smaller, simpler, subcomponents of programs Provide abstraction –hide low-level details.
CMPSC 16 Problem Solving with Computers I Spring 2014 Instructor: Tevfik Bultan Lecture 12: Pointers continued, C strings.
1 Programming with Pointers Turgay Korkmaz Office: SB Phone: (210) Fax: (210) web:
CSC 2400 Computer Systems I Lecture 5 Pointers and Arrays.
ECE 103 Engineering Programming Chapter 47 Dynamic Memory Alocation Herbert G. Mayer, PSU CS Status 6/4/2014 Initial content copied verbatim from ECE 103.
1 Pointers and Strings Chapter 5 2 What You Will Learn...  How to use pointers Passing arguments to functions with pointers See relationship of pointers.
1 Memory and Data Structures Patt and Patel Ch. 10 & 16.
Review 1 List Data Structure List operations List Implementation Array Linked List.
 2007 Pearson Education, Inc. All rights reserved C Arrays.
Pointers *, &, array similarities, functions, sizeof.
Computer Organization and Design Pointers, Arrays and Strings in C Montek Singh Sep 18, 2015 Lab 5 supplement.
 2008 Pearson Education, Inc. All rights reserved. 1 Arrays and Vectors.
Functions. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 9-2 JSR Instruction Jumps to a location (like.
Liang, Introduction to C++ Programming, (c) 2007 Pearson Education, Inc. All rights reserved X 1 Chapter Array Basics.
Chapter 14 Functions. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Declarations (aka prototype) int.
Chapter 8 Arrays. A First Book of ANSI C, Fourth Edition2 Introduction Atomic variable: variable whose value cannot be further subdivided into a built-in.
Computer Programming for Engineers
Pointers PART - 2. Pointers Pointers are variables that contain memory addresses as their values. A variable name directly references a value. A pointer.
2/23/2016Course material created by D. Woit 1 CPS 393 Introduction to Unix and C START OF WEEK 9 (C-3)
Dr. Yang, QingXiong (with slides borrowed from Dr. Yuen, Joe) LT:10 Advance Pointer Array, String and Dynamic Memory Allocation CS2311 Computer Programming.
CCSA 221 Programming in C CHAPTER 11 POINTERS ALHANOUF ALAMR 1.
CMPSC 16 Problem Solving with Computers I Spring 2014 Instructor: Lucas Bang Lecture 11: Pointers.
Chapter 16 Pointers and Arrays Pointers and Arrays We've seen examples of both of these in our LC-3 programs; now we'll see them in C. Pointer Address.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9-1 Pointer Variables Pointer variable : Often just called a pointer, it's.
BIL 104E Introduction to Scientific and Engineering Computing Lecture 9.
Windows Programming Lecture 03. Pointers and Arrays.
Pointers A variable that holds an address value is called a pointer variable, or simply a pointer.  What is the data type of pointer variables? It’s not.
Chapter 14 Functions.
Computer Organization and Design Pointers, Arrays and Strings in C
Student Book An Introduction
Chapter 14 Functions.
Chapter 16 Pointers and Arrays
Object Oriented Programming COP3330 / CGS5409
More C Stack Frames / Pointer variables
Chapter 16 Pointers and Arrays
Pointers and Arrays.
Chapter 16 Pointers and Arrays
Chapter 16 Pointers and Arrays
Chapter 9: Pointers and String
Programming in C Pointers and Arrays.
Chapter 14 Functions.
Chapter 16 Pointers and Arrays
Chapter 14 Functions.
Implementing Functions: Overview
Presentation transcript:

Chapter 17 Pointers and Arrays

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Pointers and Arrays We've seen examples of both of these in our LC-2 programs; now we'll see them in C. Pointer Address of a variable in memory Allows us to indirectly access variables  in other words, we can talk about its address rather than its value Array A list of values arranged sequentially in memory Example: a list of telephone numbers Expression a[4] refers to the 5th element of the array a

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Address vs. Value Sometimes we want to deal with the address of a memory location, rather than the value it contains. Recall example from Chapter 6: adding a column of numbers. R0 contains address of first location. Read value, add to sum, and increment R0 until all numbers have been processed. R0 is a pointer -- it contains the address of data we’re interested in. x3107 x2819 x0110 x0310 x0100 x1110 x11B1 x0019 x3100 x3101 x3102 x3103 x3104 x3105 x3106 x3107 x3100 R0 address value

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Another Need for Addresses Consider the following function that's supposed to swap the values of its arguments. void Swap(int firstVal, int secondVal) { int tempVal = firstVal; firstVal = secondVal; secondVal = tempVal; }

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Executing the Swap Function valueA valueB firstVal secondVal tempVal x R6 before call valueA valueB firstVal secondVal tempVal x R6 after call These values changed......but these did not. Swap needs addresses of variables outside its own activation record.

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Pointers in C C lets us talk about and manipulate pointers as variables and in expressions. Declaration int *p; /* p is a pointer to an int */ A pointer in C is always a pointer to a particular data type: int*, double*, char*, etc. Operators *p -- returns the value pointed to by p &z -- returns the address of variable z

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Example int i; int *ptr; i = 4; ptr = &i; *ptr = *ptr + 1; store the value 4 into the memory location associated with i store the address of i into the memory location associated with ptr read the contents of memory at the address stored in ptr store the result into memory at the address stored in ptr

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Example: LC-2 Code ; i is 1st local (offset 3), ptr is 2nd (offset 4) ; i = 4; AND R0, R0, #0 ; clear R0 ADD R0, R0, #4 ; put 4 in R0 STR R0, R6, #3 ; store in i ; ptr = &i; ADD R0, R6, #3 ; R0 = R6 + 3 (addr of i) STR R0, R6, #4 ; store in ptr ; *ptr = *ptr + 1; LDR R0, R6, #4 ; R0 = ptr LDR R1, R0, #0 ; load contents (*ptr) ADD R1, R1, #1 ; add one STR R1, R0, #0 ; store result where R0 points

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Pointers as Arguments Passing a pointer into a function allows the function to read/change memory outside its activation record. void NewSwap(int *firstVal, int *secondVal) { int tempVal = *firstVal; *firstVal = *secondVal; *secondVal = tempVal; } Arguments are integer pointers. Caller passes addresses of variables that it wants function to change.

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Passing Pointers to a Function main() wants to swap the values of x and y passes the addresses to NewSwap: NewSwap(&x, &y); Code for passing arguments: ADD R0, R6, #3 ; addr of x STR R0, R6, #8 ; store in arg1 ADD R0, R6, #4 ; addr of y STR R0, R6, #9 ; store in arg2 ret val ret addr dyn link x y ret val ret addr dyn link firstVal secondVal tempVal x3F x4100 x4103 x4104 x4100 R6

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Code Using Pointers Inside the NewSwap routine ; int tempVal = *firstVal; LDR R0, R6, #3 LDR R1, R0, #0 ; x4103 ; *secondVal = tempVal; LDR R2, R6, #5 STR R2, R1, #0 ; -> x4104 ret val ret addr dyn link x y ret val ret addr dyn link firstVal secondVal tempVal x3F x4100 x4103 x x4100 R6

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Returning a Pointer Modify swap routine to return the address of the larger value. int *ModSwap(int* firstVal, int* secondVal) { int tempVal = *firstVal; *firstVal = *secondVal; *secondVal = tempVal; if (*firstVal >= *secondVal) return firstVal; else return secondVal; } Function returns integer pointer. Compare values, not pointers. Return pointer.

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Using Arguments for Results Pass address of variable where you want result stored useful for multiple results Example: return value via pointer return status code as function result This solves the mystery of why ‘&’ with argument to scanf: scanf("%d ", &dataIn); read a decimal integer and store in dataIn

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Syntax for Pointer Operators Declaring a pointer type *var; type* var; Either of these work -- whitespace doesn't matter. Type of variable is int* (integer pointer), char* (char pointer), etc. Creating a pointer &var Must be applied to a memory object, such as a variable. In other words, &3 is not allowed. Dereferencing Can be applied to any expression. All of these are legal: *var contents of mem loc pointed to by var **var contents of mem loc pointed to by memory location pointed to by var *3 contents of memory location 3

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Arrays How do we allocate a group of memory locations? character string table of numbers How about this? Not too bad, but… what if there are 100 numbers? how do we write a loop to process each number? Fortunately, C gives us a better way -- the array. int num[4]; Declares a sequence of four integers, referenced by: num[0], num[1], num[2], num[3]. int num0; int num1; int num2; int num3;

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Array Syntax Declaration type variable[num_elements]; Array Reference variable[index]; all array elements are of the same type number of elements must be known at compile-time i-th element of array (starting with zero); no limit checking at compile-time or run-time

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Array as a Local Variable Array elements are allocated as part of the activation record. int x; int grid[10]; ret val ret addr dyn link x grid[0] grid[1] grid[2] grid[3] grid[4] grid[5] grid[6] grid[7] grid[8] grid[9] x4100 R6

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display LC-2 Code for Array References ; x = grid[3] + 1 ADD R0, R6, #4 ; base of array ADD R1, R0, #3 ; addr of 3rd LDR R2, R1, #0 ; grid[3] ADD R2, R2, #1 ; plus 1 STR R2, R6, #3 ; -> x ; grid[6] = 5; AND R2, R2, #0 ADD R2, R2, #5 ; R2 = 5 ADD R0, R6, #4 ; base of array ADD R1, R0, #6 ; 6th element STR R2, R1, #0 ; -> grid[6] ret val ret addr dyn link x grid[0] grid[1] grid[2] grid[3] grid[4] grid[5] grid[6] grid[7] grid[8] grid[9] x4100 R6

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Passing Arrays as Arguments C passes arrays by reference the address of the array (i.e., of the first element) is written to the function's activation record otherwise, would have to copy each element main() { int numbers[MAX_NUMS]; … mean = Average(numbers); … } int Average(int inputValues[MAX_NUMS]) { … for (index = 0; index < MAX_NUMS; index++) sum = sum + indexValues[index]; return (sum / MAX_NUMS); } This must be a constant, e.g., #define MAX_NUMS 10

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display A String is an Array of Characters Allocate space for a string just like any other array: char outputString[16]; Space for string must contain room for terminating zero. Special syntax for initializing a string: char outputString[16] = "Result = "; …which is the same as: outputString[0] = 'R'; outputString[1] = 'e'; outputString[2] = 's';...

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display I/O with Strings Printf and scanf use "%s" format character for string Printf -- print characters up to terminating zero printf("%s", outputString); Scanf -- read characters until whitespace, store result in string, and terminate with zero scanf("%s", inputString);

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Relationship between Arrays and Pointers An array name is essentially a pointer to the first element in the array char word[10]; char *cptr; cptr = word; /* points to word[0] */ Difference: Can change the contents of cptr, as in cptr = cptr + 1; (The identifier "word" is not a variable.)

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Correspondence between Ptr and Array Notation Given the declarations on the previous page, each line below gives three equivalent expressions: cptrword&word[0] (cptr + n)word + n&word[n] *cptr*wordword[0] *(cptr + n)*(word + n)word[n]

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Common Pitfalls with Arrays in C Overrun array limits There is no checking at run-time or compile-time to see whether reference is within array bounds. int array[10]; int i; for (i = 0; i <= 10; i++) array[i] = 0; Declaration with variable size Size of array must be known at compile time. void SomeFunction(int num_elements) { int temp[num_elements]; … }

Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Pointer Arithmetic Address calculations depend on size of elements In our LC-2 code, we've been assuming one word per element.  e.g., to find 4th element, we add 4 to base address It's ok, because we've only shown code for int and char, both of which take up one word. If double, we'd have to add 8 to find address of 4th element. C does size calculations under the covers, depending on size of item being pointed to: double x[10]; double *y = x; *(y + 3) = 13; allocates 20 words (2 per element) same as x[3] -- base address plus 6