University of Washington Computer Programming I Lecture 13 Pointer Parameters 2000 UW CSE M 1 Overview Concepts this lecture Function parameters Call by value review Pointer parameters call by reference Pointer types and operators M 2 Reading 6 1 Output pointer Parameters 6 2 Multiple calls to functions with output parameters 6 3 Scope of Names 6 4 Passing Output Parameters to other functions 6 6 6 7 Debugging and common programming errors M 3 What Does This Print change x and y void move one int x int y x x 1 y y 1 int main void int a b a 4 b 7 move one a b printf d d a b return 0 Output 3 8 4 7 M 4 Function Call Review Remember how function calls are executed Allocate space for parameters and local variables Initialize parameters by copying argument values Begin execution of the function body Trace carefully to get the right answer M 5 Trace move one X 4 3 X 7 8 x y 4 7 main a b change x and y void move one int x int y x x 1 y y 1 int main void int a b a 4 b 7 move one a b printf d d a b return 0 Output 4 7 M 6 Call By Value is Not Enough Once the function parameters are initialized with copies of the arguments there is no further connection If the function changes its parameters it affects the local copy only To actually change the arguments in the caller the function needs access to the locations of the arguments not just their values M 7 New Type Pointer A pointer contains a reference to another variable that is a pointer contains the memory address of a variable xp has type pointer to int often written xp has type int 32 x xp M 8 Declaring and Using a Pointer int x declares an int variable int xp declares a pointer to int If the address of x is stored in xp then xp 0 Assign integer 0 to x xp xp 1 Add 1 to x X 0 1 x xp M 9 Pointer Solution to move one void move one int x ptr int y ptr x ptr x ptr 1 y ptr y ptr 1 int main void int a b a 4 b 7 move one a b printf d d a b return 0 The operator in front of a variable name creates a pointer to that variable M 10 Trace move one x ptr y ptr main 4 3 X X 7 8 a b void move one int x ptr int y ptr x ptr x ptr 1 y ptr y ptr 1 a 4 b 7 move one a b Output M 11 Trace void move one int x ptr int y ptr x ptr x ptr 1 y ptr y ptr 1 main 4 3 X X 7 8 a b a 4 b 7 move one a b Output 3 8 M 12 Aliases x ptr and y ptr act like aliases for the variables a and b in the function call When you change x ptr and x ptr you are changing the values of the caller s variables To create these aliases you need to use a b in the call M 13 Pointer Types Three new types int pointer to int double pointer to double char pointer to char These are all different a pointer to a char can t be used if the function parameter is supposed to be a pointer to an int for example M 14 Pointer Operators Two new unary operators address of can be applied to any variable or param location pointed to by can be applied only to a pointer Keep track of the types if x has type double x has type pointer to double or double M 15 Vocabulary Dereferencing or indirection following a pointer to a memory location The book calls pointer parameters output parameters can be used to provide a value input as usual and or store a changed value output Don t confuse with printed output printf M 16 Why Use Pointers For parameters in functions that need to change their actual parameters such as move one in functions that need multiple return values such as scanf These are the only uses in this course In advanced programming pointers are used to create dynamic data structures M 17 scanf Revisited Now we can make sense out of the punctuation in scanf int x y z scanf d d d x y x y scanf d d x y NO YES Why M 18 Example Midpoint Of A Line Problem Find the midpoint of a line segment x2 y2 Algorithm find the average of the coordinates of the x1 y1 endpoints xmid x1 x2 2 0 ymid y1 y2 2 0 x1 x2 y1 y2 2 2 Programming approach We d like to package this in a function M 19 Function Specification Function specification given endpoints x1 y1 and x2 y2 of a line segment store the coordinates of the midpoint in midx midy x2 y2 Parameters x1 y1 x2 y2 midx and midy The midx midy parameters x1 y1 are being altered so they need to be pointers x1 x2 y1 y2 2 2 M 20 Midpoint Function Code void set midpoint double x1 double y1 double x2 double y2 double midx p double midy p midx p x1 x2 2 0 midy p y1 y2 2 0 double x end y end mx my x end 250 0 y end 100 0 set midpoint 0 0 0 0 x end y end mx my x2 y2 x1 y1 x1 x2 y1 y2 2 2 M 21 Trace set midpoint 0 0 0 0 250 0 x1 y1 x2 100 0 y2 midx p midy p main 250 0 100 0 x end y end 125 0 mx 50 0 my M 22 Example Gameboard Coordinates Board Coordinates row column used by players Screen Coordinates x y x y used by graphics package Problem convert x y to row col M 23 Coordinate Conversion Analysis 4 3 row 2 1 x y y LL Y 0 SQUARE SIZE x LL X LL X LL Y 0 1 2 col 3 4 M 24 Coordinate Conversion Code define LL X 40 define LL Y 20 define SQUARE SIZE 10 void screen to board int screenx int screeny coords on screen int row p int col p position on board row p screeny LL Y SQUARE SIZE col p screenx LL X SQUARE SIZE screen to board x y row col M 25 Problem Reorder Suppose we want a function to arrange its two parameters in numeric order Example 12 3 need to be reordered as 3 12 1 5 is already in order no change needed Parameter analysis since we might change the parameter values they have to be pointers This example is a small version of a very important problem in computer science called M 26 sorting Code for Reorder ensure p1 p2 interchanging …
View Full Document
Unlocking...