1 pointers and strings chapter 5 2 what you will learn... how to use pointers passing arguments to...

35
1 Pointers and Strings Chapter 5

Upload: elaine-potter

Post on 04-Jan-2016

221 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 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

Pointers and Strings

Chapter 5

Page 2: 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

2

What You Will Learn . . .

How to use pointers

Passing arguments to functions with pointers See relationship of

pointers to strings and arrays

Pointers can point to functions

Declaring & using arrays of strings

Page 3: 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

3

Introduction

Pointer variables contain memory addresses as their values

Contrast normal variables which contain a specific value

x holds a value xptr holds memory address of some int location

int *xptr, x;

x 5

xptr

Page 4: 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

4

Pointer Variable Declarations and Initializations Must declare the type of variable to which

pointer variable will point

Must use the leading * to specify this is a pointer variable

Good idea to include ptr in the name of the pointer variable

float amt, *fptr;

Page 5: 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

5

Pointer Initialization

When declared, variables should NOT be assumed to have any certain value

As with all variables, pointer variables should be explicitly initialized– Initialized with address of a specific

variable– Initialized to 0 or NULL (points to nothing)

Page 6: 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

6

Pointer Operators

Address operator &– unary operator– returns address of operand

int *xptr, x;

x = 5;

xptr = &x;

x 5

xptr

Page 7: 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

7

Pointer Operators

Address operator &– unary operator– returns address of operand

int *xptr, x;

x = 5;

xptr = &x;x 5

xptr 1234

1234

6500

Address

Values actually stored

Page 8: 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

8

Pointer Operators

The indirection or dereferencing operator– Use the * symbol

*xptr will yield the value stored at the location to which xptr points

int x, *xptr;x = 50;xptr = &x;cout << *xptr;// what gets printed?

50

Page 9: 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

9

Pointer Operators

The precedence of – & the address operator– * the dereferencing operator

Higher precedence than multiplication and division

Lower precedence than parentheses

Page 10: 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

10

Calling Functions by Reference

Three ways to pass arguments to a function– call by value– call by reference with reference

parameters– call by reference with pointer parameters

void doit (int amt);void whatever ( float &value);void fribble (char *ch);

Page 11: 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

11

Calling Functions by Reference

Call by value– value gets passed one way (to the function) only– can use constant, expression, or variable in call

Reference parameter– value passed both ways– must use variable in call– parameter automatically dereferenced locally

Page 12: 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

12

Calling Functions by Reference

Must use address in call – use address operator

fribble (&c1); Must explicitly dereference locally within

function– use * operator

void fribble (char *ch){ *ch = …. ; }

Page 13: 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

13

Using the const Qualifier with Pointers Recal that const informs the compiler

that the value of a "variable" should not be modified

This can also be used on function parameters so that actual parameters are NOT affected by changes in formal parameters

void try_a_change (const char *s_ptr)

Page 14: 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

14

const Used on Parameters

When used, do not try to alter contents of where pointer points to

void double_int (const int *num_ptr){ *num_ptr = 2 * *num_ptr;}

compiler error

Page 15: 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

15

const Used on Parameters

Consider the advantage of passing large data objects (structures, arrays) using points to constant data– saves memory

• function does not need to create duplicate data object

– saves time• program need not copy large number of bytes

to the local object

Page 16: 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

16

Bubble Sort Using Call-by-reference Refer to “Cyber Classroom” CD for

author’s description of the program Run the program

Page 17: 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

17

Bubble Sort Using Call-by-reference -- Note ... array declared as int *array

not int array [ ] Parameter size declared as const to

enforce sorting function not altering size– when passing an array to function, send size

also -- don’t have it built in Prototype for swap included inside

bubbleSort -- it is the only function that calls swap

Page 18: 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

18

Pointer Expressions & Pointer Arithmetic Pointer values are valid operands in

expressions– arithmetic– assignment– comparison

Not all such operators are valid with pointer variables

Page 19: 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

19

Pointer Expressions & Pointer Arithmetic Valid operations on pointers

++ - - + += - - =

int v[5], *vPtr;vPtr = v; // same as vPtr = &v[0];

Page 20: 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

20

Pointer Expressions & Pointer Arithmetic Consider:

vPtr += 2; // same as vPtr = vPtr + 2;

/* But, beware of vPtr -= 4; Why?

Page 21: 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

21

Pointer Expressions & Pointer Arithmetic -- warnings !! Beware use of pointer arithmetic on pointers

which do not reference an array Consider results of subtracting or comparing two

pointers which do not reference the same array C++ has no range checking -- if you run off the

end of an array, you can be in trouble Pointers can be assigned to other pointers only

if they are pointers to the same type– although typecasting can be used (carefully)

Page 22: 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

22

Pointers to void ( void * )

This is a generic pointer– can represent any pointer type

All pointer types can be assigned a pointer to void without casting

A pointer to void cannot be be assigned a pointer of another type (without casting)

Void pointer cannot be dereferenced(why not??)

Page 23: 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

23

Relationship Between Pointers and Arrays

// Givenint list [5], *intPtr;intPtr = list; // name of array is a pointer constant, an address

Then we can use eitherlist[2] or *(intPtr + 2)

to reference the second element of the array The former is clearer but takes longer to

compile

Page 24: 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

24

Relationship Between Pointers and Arrays Note how pointer is used to traverse

array:

int b[] = { 10, 20, 30, 40 };int *bPtr = b; // set bPtr to point to array b

for ( offset = 0; offset < 4; offset++ ) cout << "*(bPtr + " << offset << ") = " << *( bPtr + offset ) << '\n';

for (bPtr = b; bPtr < b + 4; bPtr++) cout << *bPtr << '\n'; How are these

two different?How are these two different?

Page 25: 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

25

Relationship Between Pointers and Arrays What is wrong with this use of the name

of the array?

for ( bPtr = b ; b < bPtr + 4; b++ ) cout << *b << '\n';

The name of the array is a pointer constant

The name of the array is a pointer constant

Page 26: 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

26

Arrays of Pointers

Common use is for an array of strings (character arrays)char *suit [4] = {"Hearts","Diamonds", "Clubs", "Spades"};

Page 27: 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

27

Arrays of Pointers

Character values stored in memory, one byte longer than length of string

Array suit actually holds pointers to these locations– point to first character of each string

Note that memory not wasted for unneeded characters of shorter strings

char *suit [4] = {"Hearts","Diamonds", "Clubs", "Spades"};char *suit [4] = {"Hearts","Diamonds", "Clubs", "Spades"};

Page 28: 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

28

Function Pointers

Pointer to a function contains the address of the function in memory

A function name is a pointer constant to the starting address in memory of the code of the function

Pointers to functions can be …– passed as parameters (both directions)– stored in arrays– assigned to other function pointers

Page 29: 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

29

Function Pointers Consider the following code:

Function sort receives a pointer to a function– function ascending

– function descending

void bubble( int [], const int, int (*)( int, int ) );int ascending( int, int );int descending( int, int ); . . . void bubble( int work[], const int size, int (*compare)( int, int ) )

depending onpointer passed in call

Page 30: 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

30

Function Pointers

Sending a function name as the actual parameter sends the address of that function to another function

if ( order == 1 ) { bubble( a, arraySize, ascending ); cout << "\nData items in ascending order\n"; } else { bubble( a, arraySize, descending ); cout << "\nData items in descending order\n"; }

Page 31: 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

31

Function Pointers

Consider an array of functions

void (*f [3] ) ( int ) = { f1, f2, f3 }; Assumptions

– f1, f2, and f3 have been previously declared– each has a single int parameter– they are called with an array number

f [ choice ] (x_int);

Page 32: 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

32

Characters and Strings

Character constant– an integer value represented as a

character in single quotes 'x' or '\t' String

– series of characters treated as a single unit String constants (string literals)

– enclosed in double quotes "Hi Mom" "2/14/1999"

Page 33: 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

33

Strings

An array of characters ending in the null character '\0'

Accessed via pointer to first character in the string

Value of a string– the constant address of its first character

Assigned in declaration as array or char pointer char name[ ] = "Snuffy Snail"; char *addr = "123 Frogpond";

Page 34: 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

34

Strings

Make sure to allocate enough characters in the array to have room for the '\0'

If you create a "string", make sure the '\0' gets tagged on the end

Passing a character as a parameter when a string is expected can cause run time problems

Vice-versa is a syntax error

Page 35: 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

35

String Manipulation Functions

Recall that strings must be handled in a special manner char name[30]; name = "Osgood Smart";

Use functions provided– See page 325

– make sure to

#include <string.h>#include <string.h>

Don't do it!! Why?