Department of Information Technology
-
Upload
malcolm-sandoval -
Category
Documents
-
view
27 -
download
3
description
Transcript of Department of Information Technology
![Page 1: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/1.jpg)
1
Department of Information Technology
Computer Programming & Problem Solving
Ch 7Pointers
KIC/Computer Programming & Problem Solving
![Page 2: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/2.jpg)
Introduction Pointer Variable Definitions and Initialization Pointer Operators Calling Functions by Reference Using the const Qualifier with Pointers Bubble Sort Using Call by Reference Pointer Expressions and Pointer Arithmetic The Relationship between Pointers and Arrays Arrays of Pointers Pointers to Functions
2KIC/Computer Programming & Problem Solving
Outline
![Page 3: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/3.jpg)
3
ObjectivesIn this chapter, you will learn:
To be able to use pointers. To be able to use pointers to pass arguments
to functions using call by reference. To understand the close relationships among
pointers, arrays and strings. To understand the use of pointers to
functions. To be able to define and use arrays of strings.
KIC/Computer Programming & Problem Solving
![Page 4: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/4.jpg)
4
Introduction
Pointers Powerful, but difficult to masterSimulate call-by-reference Close relationship with arrays and
strings
KIC/Computer Programming & Problem Solving
![Page 5: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/5.jpg)
5
Pointer Variable Definitions and Initialization
Pointer VariablesContain memory addresses as their valuesNormal variables contain a specific value (direct
reference)
Pointers contain address of a variable that has a specific value (indirect reference)
Indirection – referencing a pointer value
count
7
count
7
countPtr
KIC/Computer Programming & Problem Solving
![Page 6: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/6.jpg)
double F=32.5;int I= 2;
6KIC/Computer Programming & Problem Solving
![Page 7: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/7.jpg)
7
Pointer Variable Definitions and Initialization
Pointer definitions* used with pointer variables
int *myPtr; Defines a pointer to an int (pointer of type int *)Multiple pointers require using a * before each
variable definitionint *myPtr1, *myPtr2;
Can define pointers to any data typeInitialize pointers to 0, NULL, or an address
• 0 or NULL – points to nothing (NULL preferred)
KIC/Computer Programming & Problem Solving
![Page 8: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/8.jpg)
8
Pointer Operators& (address operator)
Returns address of operandint y = 5;int *yPtr; yPtr = &y; /* yPtr gets address of y */yPtr “points to” y
yPtr
y
5
yptr
500000 600000
y
600000 5
Address of y is value of yptr
KIC/Computer Programming & Problem Solving
![Page 9: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/9.jpg)
9
Pointer Operators
* (indirection/dereferencing operator)– Returns a synonym/alias of what its operand points to– *yptr returns y (because yptr points to y)– * can be used for assignment
Returns alias to an object*yptr = 7; /* changes y to 7 */
Dereferenced pointer (operand of *) must be an lvalue (no constants)
* and & are inverses They cancel each other out
![Page 10: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/10.jpg)
10
The address of a is the value of aPtr.
The * operator returns an alias to what its operand points to. aPtr points to a, so *aPtr returns a.
Notice how * and & are inverses
![Page 11: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/11.jpg)
11
Operators Associativity Type
() [] left to right highest
+ - ++ -- ! * & (type) right to left unary
* / % left to right multiplicative
+ - left to right additive
< <= > >= left to right relational
== != left to right equality
&& left to right logical and
|| left to right logical or
?: right to left conditional
= += -= *= /= %= right to left assignment
, left to right comma Fig. 7.5 Operator precedence.
Pointer Operators
![Page 12: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/12.jpg)
12
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 alias/nickname for variable inside of functionvoid double( int *number ) {
*number = 2 * ( *number ); }
*number used as nickname for the variable passedKIC/Computer Programming & Problem Solving
![Page 13: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/13.jpg)
13KIC/Computer Programming & Problem Solving
![Page 14: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/14.jpg)
14KIC/Computer Programming & Problem Solving
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.
![Page 15: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/15.jpg)
15
int main(){
int number = 5;
number=cubeByValue(number);}
int cubeByValue( int n ){
return n * n * n;}
number
5n
Before
undefined
int main(){
int number = 5;
number = cubeByValue( number );
}
int cubeByValue( int n ){
return n * n * n;}
number
5n
After
5
125
int cubeByValue( int n ){
return n * n * n;}
int main(){
int number = 5;
number = cubeByValue( number );}
number
5n
After
5
Analysis of a typical call-by-value. (Part 1 of 2.)
KIC/Computer Programming & Problem Solving
![Page 16: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/16.jpg)
16
125
int main(){
int number = 5;
number = cubeByValue( number );
}
int cubeByValue( int n ){
return n * n * n;}
number
5
n
After :
undefined
125125
int main(){
int number = 5;
number = cubeByValue( number );}
int cubeByValue( int n ){
return n * n * n;}
number
125
n
After :
undefined
Analysis of a typical call-by-value. (Part 2 of 2.)
KIC/Computer Programming & Problem Solving
![Page 17: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/17.jpg)
17
Analysis of a typical call-by-reference with a pointer argument.
125void cubeByReference( int *nPtr ){ *nPtr = *nPtr * *nPtr * *nPtr;}
void cubeByReference( int *nPtr ){ *nPtr = *nPtr * *nPtr * *nPtr;}
int main(){
int number = 5;
cubeByReference( &number );}
void cubeByReference( int *nPtr ){ *nPtr = *nPtr * *nPtr * *nPtr;}
int main(){
int number = 5;
cubeByReference( &number );}
int main(){
int number = 5;
cubeByReference( &number );}
number
5
nPtr
number
5
nPtr
number
125
nPtr
Before calls :
After *nPtr
After :
undefined
call establishes this pointer
called function modifies caller’s variable
KIC/Computer Programming & Problem Solving
![Page 18: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/18.jpg)
18
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 definedint *const myPtr = &x;
Type int *const – constant pointer to an intconst int *myPtr = &x;
Regular pointer to a const intconst int *const Ptr = &x;
• const pointer to a const int• x can be changed, but not *Ptr
KIC/Computer Programming & Problem Solving
![Page 19: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/19.jpg)
KIC/Computer Programming & Problem Solving
19
![Page 20: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/20.jpg)
KIC/Computer Programming & Problem Solving
20
![Page 21: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/21.jpg)
KIC/Computer Programming & Problem Solving
21
Error
![Page 22: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/22.jpg)
22KIC/Computer Programming & Problem Solving
Changing *ptr is allowed – x is not a constant.
Changing ptr is an error – ptr is a constant pointer.
Error
![Page 23: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/23.jpg)
23KIC/Computer Programming & Problem Solving
Error
![Page 24: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/24.jpg)
24
Bubble Sort Using Call-by-reference Implement bubble sort using pointers
– Swap two elements– swap function must receive address (using &) of array
elements• Array elements have call-by-value default
– Using pointers and the * operator, swap can switch array elements
PsuedocodeInitialize array print data in original orderCall function bubblesort
print sorted arrayDefine bubblesort
KIC/Computer Programming & Problem Solving
![Page 25: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/25.jpg)
25
Bubble Sort Using Call-by-referencesizeof
– Returns size of operand in bytes– For arrays: size of 1 element * number of elements– if sizeof( int ) equals 4 bytes, then
int myArray[ 10 ];printf( "%d", sizeof(myArray) );
• will print 40sizeof can be used with
– Variable names– Type name– Constant values
KIC/Computer Programming & Problem Solving
![Page 26: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/26.jpg)
26KIC/Computer Programming & Problem Solving
![Page 27: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/27.jpg)
27KIC/Computer Programming & Problem Solving
![Page 28: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/28.jpg)
28KIC/Computer Programming & Problem Solving
![Page 29: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/29.jpg)
29KIC/Computer Programming & Problem Solving
![Page 30: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/30.jpg)
KIC/Computer Programming & Problem Solving
30
![Page 31: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/31.jpg)
31
Pointer Expressions and Pointer Arithmetic
Arithmetic operations can be performed on pointers.
Increment/decrement pointer (++ or --)Add an integer to a pointer( + or += , - or -=)Pointers may be subtracted from each otherOperations meaningless unless performed on an
array
KIC/Computer Programming & Problem Solving
![Page 32: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/32.jpg)
32
Pointer Expressions and Pointer Arithmetic
5 element int array on machine with 4 byte ints– vPtr points to first element v[ 0 ]
• at location 3000 (vPtr = 3000)– vPtr += 2; sets vPtr to 3008
• vPtr points to v[ 2 ] (incremented by 2), but the machine has 4 byte ints, so it points to address 3008
Pointer variable vPtr
v[0] v[1] v[2] v[4]v[3]
3000 3004 3008 3012 3016
location
![Page 33: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/33.jpg)
33
Subtracting pointersReturns number of elements from one to the other. If
vPtr2 = v[ 2 ];vPtr = v[ 0 ];
– vPtr2 - vPtr would produce 2
Pointer comparison ( <, == , > )See which pointer points to the higher numbered
array elementAlso, see if a pointer points to 0
Pointer Expressions and Pointer Arithmetic
KIC/Computer Programming & Problem Solving
![Page 34: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/34.jpg)
34
Pointer Expressions and Pointer Arithmetic
Pointers of the same type can be assigned to each other
If not the same type, a cast operator must be usedException: pointer to void (type void *)
• Generic pointer, represents any type• No casting needed to convert a pointer to void pointer• void pointers cannot be dereferenced
KIC/Computer Programming & Problem Solving
![Page 35: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/35.jpg)
35
The Relationship Between Pointers and Arrays
Arrays and pointers closely related– Array name like a constant pointer– Pointers can do array subscripting operations
Define an array b[ 5 ] and a pointer bPtrTo set them equal to one another use:
bPtr = b;
The array name (b) is actually the address of first element of the array b[ 5 ]bPtr = &b[ 0 ]
Explicitly assigns bPtr to address of first element of b
KIC/Computer Programming & Problem Solving
![Page 36: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/36.jpg)
int X[5]={2,4,6,8,10};
int X[3][4]={{1,3,5,7},{2,3,5,6},{6,7,8,9}};
36KIC/Computer Programming & Problem Solving
![Page 37: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/37.jpg)
37
The Relationship Between Pointers and Arrays
Element b[ 3 ] • Can be accessed by *( bPtr + 3 )
–Where n is the offset. Called pointer/offset notation
• Can be accessed by bptr[ 3 ]–Called pointer/subscript notation–bPtr[ 3 ] same as b[ 3 ]
• Can be accessed by performing pointer arithmetic on the array itself *( b + 3 )
KIC/Computer Programming & Problem Solving
![Page 38: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/38.jpg)
KIC/Computer Programming & Problem Solving
38
![Page 39: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/39.jpg)
KIC/Computer Programming & Problem Solving
39
![Page 40: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/40.jpg)
40KIC/Computer Programming & Problem Solving
![Page 41: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/41.jpg)
KIC/Computer Programming & Problem Solving
41
![Page 42: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/42.jpg)
42
Arrays of Pointers
• Arrays can contain pointers• For example: an array of strings
char *suit[ 4 ] = { "Hearts", "Diamonds", "Clubs", "Spades"};
– Strings are pointers to the first character– char * – each element of suit is a pointer to a char– The strings are not actually stored in the array suit, only
pointers to the strings are stored
– suit array has a fixed size, but strings can be of any size
suit[3]
suit[2]
suit[1]
suit[0] ’H’ ’e’ ’a’ ’r’ ’t’ ’s’ ’\0’
’D’ ’i’ ’a’ ’m’ ’o’ ’n’ ’d’ ’s’ ’\0’
’C’ ’l’ ’u’ ’b’ ’s’ ’\0’
’S’ ’p’ ’a’ ’d’ ’e’ ’s’ ’\0’
![Page 43: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/43.jpg)
43
Pointers to Functions
Pointer to function– Contains address of function– Similar to how array name is address of first element– Function name is starting address of code that
defines functionFunction pointers can be
– Passed to functions– Stored in arrays– Assigned to other function pointers
KIC/Computer Programming & Problem Solving
![Page 44: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/44.jpg)
44
Pointers to Functions
Example: bubblesortFunction bubble takes a function pointer
• bubble calls this helper function• this determines ascending or descending sorting
The argument in bubblesort for the function pointer:int ( *compare )( int a, int b )
tells bubblesort to expect a pointer to a function that takes two ints and returns an int
If the parentheses were left out:int *compare( int a, int b )
Defines a function that receives two integers and returns a pointer to a int
KIC/Computer Programming & Problem Solving
![Page 45: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/45.jpg)
KIC/Computer Programming & Problem Solving
45
![Page 46: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/46.jpg)
KIC/Computer Programming & Problem Solving
46
![Page 47: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/47.jpg)
KIC/Computer Programming & Problem Solving
47
![Page 48: Department of Information Technology](https://reader030.fdocuments.us/reader030/viewer/2022032708/56812acd550346895d8ea315/html5/thumbnails/48.jpg)
KIC/Computer Programming & Problem Solving
48