DOC PREVIEW
UW CSE 142 - Study Notes

This preview shows page 1-2 out of 6 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 6 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 6 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 6 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

M-1M-1CSE 142Computer Programming IPointer Parameters© 2000 UW CSEM-2OverviewConcepts this lectureFunction parametersCall by value (review)Pointer parameters - call by referencePointer types& and * operatorsM-3Reading6.1 Output (pointer) Parameters6.2 Multiple calls to functions with output parameters6.3 Scope of Names6.4 Passing Output Parameters to other functions 6.6, 6.7 Debugging and common programming errors M-43 8 ?4 7 ?What Does This Print?int main ( void ) {int a, b ;a = 4 ; b = 7 ;move_one(a, b) ;printf("%d %d", a ,b);return 0;}Output:/* change x and y */void move_one ( int x, int y ) {x = x - 1;y = y + 1;}M-5Function Call ReviewRemember how function calls are executed:Allocate space for parameters and local variablesInitialize parameters by copying argument valuesBegin execution of the function bodyTrace carefully to get the right answerM-647X 3 X 8Trace/* 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;}mainab4 7Output: 4 7move_onexyM-2M-7Call By Value is Not EnoughOnce 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-8New Type: PointerA 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* )x32xpM-9xDeclaring and Using a Pointerint 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 */xp0X 1M-1 0Pointer Solution to move_oneThe & operator in front of a variable name creates a pointer to that variablevoid 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;}M-1 1Tracemainab47move_onex_ptr y_ptrOutput: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 ) ;X 3 X 8M-1 2Tracemainab47Output: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 ) ;X 3 X 83 8M-3M-1 3Aliases*x_ptr and *y_ptr act like aliases for the variables a and b in the function call.When you change *x_ptr and *y_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-1 4Pointer TypesThree 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-1 5Pointer OperatorsTwo new (unary) operators:& “address of”& can be applied to any variable (or param)* “location pointed to by”* can be applied only to a pointerKeep track of the types:if x has type double,&x has type “pointer to double” or “double *”M-1 6VocabularyDereferencing or indirection:following a pointer to a memory locationThe 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-1 7Why 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 courseIn advanced programming, pointers are used to create dynamic data structures. M-1 8Now we can make sense out of the punctuation in scanfint x,y,z;scanf("%d %d %d", x, y, x+y); NO!scanf("%d %d", &x, &y); YES! Why?scanf RevisitedM-4M-1 9Problem: Find the midpoint of a line segment.Algorithm: find the average of the coordinates of the endpoints:xmid = (x1+x2)/2.0;ymid = (y1+y2)/2.0;Example: Midpoint Of A LineProgramming approach: We’d like to package this in a function(x1, y1)(x2, y2)(x1+x2) (y1+y2)2 2,()M-2 0The (midx,midy) parameters are being altered, so they need to be pointersFunction SpecificationFunction specification: given endpoints (x1,y1) and (x2,y2) of a line segment, store the coordinates of the midpoint in (midx, midy) Parameters:x1, y1, x2, y2, midx, and midy(x1, y1)(x2, y2)(x1+x2) (y1+y2)2 2,()M-2 1void 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;}Midpoint Function: Codedouble 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);(x1, y1)(x2, y2)(x1+x2) (y1+y2)2 2,()M-2 2Traceset_midpointx1 y1 x2 y2 midx_p midy_pmainx_end y_end mx my250.0 100.00.0 0.0 250.0 100.0125.050.0M-2 3Example: Gameboard CoordinatesBoard Coordinatesrow, column (used by players)Screen Coordinatesx, y (used by graphics package)(x,y)Problem: convert (x,y) to (row,col)M-2 4Coordinate Conversion: Analysisrowcol(LL_X, LL_Y)(x,y)x – LL_Xy – LL_YSQUARE_SIZE012 3443210M-5M-2 5void screen_to_board ( int screenx, int screeny, /* coords on screen */int * row_p, int * col_p) /* position on board */{Coordinate Conversion: Code#define LL_X 40#define LL_Y 20#define SQUARE_SIZE 10screen_to_board (x, y, &row, &col);*row_p = (screeny - LL_Y) / SQUARE_SIZE;*col_p = (screenx - LL_X) / SQUARE_SIZE;}M-2 6Problem: ReorderSuppose we want a function to arrange its two parameters in reverse numeric order.Example: -1, 5 need to be reordered as 5, -112, 3 is already in order (no change needed)Parameter analysis: since we might change the parameter values, they have to be pointersThis example is a small version of a very important problem in computer science, called “sorting”M-2 7Code for Reorder/* ensure *p1 >= *p2, interchanging values if needed */void reorder(int *p1, int *p2) {int tmp;if (*p1 < *p2) {tmp = *p1;*p1 = *p2;*p2 = tmp;}}These 3 lines can be said to "swap" two valuesM-2 8swap as a Function/* interchange *p and *q */void swap ( int * p, int * q) {int temp ;temp = *p ;*p = *q ;*q = temp ;}int a, b ;a = 4; b = 7;...swap (&a, &b)


View Full Document

UW CSE 142 - Study Notes

Download Study Notes
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Study Notes and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Study Notes 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?