Presentation is loading. Please wait.

Presentation is loading. Please wait.

Dale Roberts Department of Computer and Information Science, School of Science, IUPUI CSCI N305 Pointers Call-by-Reference.

Similar presentations


Presentation on theme: "Dale Roberts Department of Computer and Information Science, School of Science, IUPUI CSCI N305 Pointers Call-by-Reference."— Presentation transcript:

1 Dale Roberts Department of Computer and Information Science, School of Science, IUPUI CSCI N305 Pointers Call-by-Reference

2 Dale Roberts Calling Functions by Reference Call by reference with pointer arguments Pass address of argument using & operator Allows you to change actual location in memory Arrays are not passed with & because the array name is already a pointer * Operator * Operator Used as formal parameter for variable inside of function void double_num ( int *number ) { *number = 2 * ( *number ); } *number used as nickname for the actual variable passed

3 Dale Roberts 1 /* 2 Cube a variable using call-by-value 3 */ 4 5#include 6 7int cubeByValue( int ); /* prototype */ 8 9int main() 10{ 11 int number = 5; 12 13 printf( "The original value of number is %d", number ); 14 number = cubeByValue( number ); 15 printf( "\nThe new value of number is %d\n", number ); 16 17 return 0; 18} 19 20int cubeByValue( int n ) 21{ 22 return n * n * n; /* cube number in main */ 23} The original value of number is 5 The new value of number is 125 Function prototype Initialize variables Call function Define function Program Output Example of Calling Functions by Value

4 Dale Roberts int main() { int number = 5; number = cubeByValue( number ); } int main() { int number = 5; number = cubeByValue( number ); } int main() { int number = 5; number = cubeByValue( number ); } int main() { int number = 5; number = cubeByValue( number ); } int main() { int number = 5; number = cubeByValue( number ); } int cubeByValue( int n ) { return n * n * n; } int cubeByValue( int n ) { return n * n * n; } int cubeByValue( int n ) { return n * n * n; } int cubeByValue( int n ) { return n * n * n; } int cubeByValue( int n ) { return n * n * n; } number 5 5 5 5 125 n undefined n 5 n 5 n n 125 Example of Calling Functions by Value

5 Dale Roberts 1/* Fig. 7.7: fig07_07.c 2 Cube a variable using call-by-reference 3 with a pointer argument */ 4 5#include 6 7void cubeByReference( int * ); /* prototype */ 8 9int main() 10{ 11 int number = 5; 12 13 printf( "The original value of number is %d", number ); 14 cubeByReference( &number ); 15 printf( "\nThe new value of number is %d\n", number ); 16 17 return 0; 18} 19 20void cubeByReference( int *nPtr ) 21{ 22 *nPtr = *nPtr * *nPtr * *nPtr; /* cube number in main */ 23} The original value of number is 5 The new value of number is 125 Notice how the address of number is given - cubeByReference expects a pointer (an address of a variable). Inside cubeByReference, *nPtr is used (* nPtr is number ). Notice that the function prototype takes a pointer to an integer ( int * ). Function prototype Initialize variables Call function Define function Program Output Example of Calling Functions by Reference

6 Dale Roberts Example of Calling Functions by Reference int main() { int number = 5; cubeByReference( &number ); } int main() { int number = 5; cubeByReference( &number ); } int main() { int number = 5; cubeByReference( &number ); } void cubeByReference( int *nPtr ) { *nPtr = *nPtr * *nPtr * *nPtr; } void cubeByReference( int *nPtr ) { *nPtr = *nPtr * *nPtr * *nPtr; } void cubeByReference( int *nPtr ) { *nPtr = *nPtr * *nPtr * *nPtr; } number 5 nPtr undefined n nPtr Before the call by reference to cubeByReference: After call by reference to cubeByReference and before *nPtr is cubed: After *nPtr is cubed : number 5 nPtr address of number 125 address of number

7 Dale Roberts COMPUTER MEMORY CONSTANT MEMORY AREA VARIABLE MEMORY AREA x1 myPtr1 x2 myPtr2 x3 Ptr x myPtr case 1 case 2 case 3 case with using const Using the const Qualifier with Pointers const qualifier Variable cannot be changed Use const if function does not need to change a variable Attempting to change a const variable produces an error const pointers Point to a constant memory location Must be initialized when declared 1) int *const myPtr1 = &x1; Type int *const Constant pointer to an int x can be changed, but not *Ptr 2) const int *myPtr2 = &x2; Regular pointer to a const int 3) const int *const Ptr = &x3; const pointer to a const int

8 Dale Roberts 1/* Fig. 7.13: fig07_13.c 2 Attempting to modify a constant pointer to 3 non-constant data */ 4 5#include 6 7int main() 8{8{ 9 int x, y; 10 11 int * const ptr = &x; /* ptr is a constant pointer to an 12 integer. An integer can be modified 13 through ptr, but ptr always points 14 to the same memory location. */ 15 *ptr = 7; 16 ptr = &y; 17 18 return 0; 19} FIG07_13.c: Error E2024 FIG07_13.c 16: Cannot modify a const object in function main *** 1 errors in Compile *** Changing *ptr is allowed – x is not a constant. Changing ptr is an error – ptr is a constant pointer. Declare variables Declare const pointer to an int Change *ptr (which is x ) Attempt to change ptr Output


Download ppt "Dale Roberts Department of Computer and Information Science, School of Science, IUPUI CSCI N305 Pointers Call-by-Reference."

Similar presentations


Ads by Google