Presentation is loading. Please wait.

Presentation is loading. Please wait.

Pointers Call-by-Reference CSCI 230

Similar presentations


Presentation on theme: "Pointers Call-by-Reference CSCI 230"— Presentation transcript:

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

2 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 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 Example of Calling Functions by Value
1 /* 2 Cube a variable using call-by-value 3 */ 4 5 #include <stdio.h> 6 7 int cubeByValue( int ); /* prototype */ 8 9 int 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 20 int cubeByValue( int n ) 21 { 22 return n * n * n; /* cube number in main */ 23 } Function prototype Initialize variables Call function Define function Program Output The original value of number is 5 The new value of number is 125

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

5 Example of Calling Functions by Reference
1 /* Fig. 7.7: fig07_07.c 2 Cube a variable using call-by-reference 3 with a pointer argument */ 4 5 #include <stdio.h> 6 7 void cubeByReference( int * ); /* prototype */ 8 9 int 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 20 void cubeByReference( int *nPtr ) 21 { 22 *nPtr = *nPtr * *nPtr * *nPtr; /* cube number in main */ 23 } Function prototype Initialize variables Call function Define function Program Output Notice that the function prototype takes a pointer to an integer ( int * ). 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). The original value of number is 5 The new value of number is 125

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

7 Using the const Qualifier with Pointers
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 int *const myPtr1 = &x1; Type int *const Constant pointer to an int x can be changed, but not *Ptr const int *myPtr2 = &x2; Regular pointer to a const int const int *const Ptr = &x3; const pointer to a const int COMPUTER MEMORY CONSTANT MEMORY AREA VARIABLE MEMORY AREA x1 myPtr1 x2 myPtr2 x3 Ptr x myPtr case 1 2 case 3 case with using const

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


Download ppt "Pointers Call-by-Reference CSCI 230"

Similar presentations


Ads by Google