Pointers - MST · Like other variables or constants, pointers must be declared General pointer...
Transcript of Pointers - MST · Like other variables or constants, pointers must be declared General pointer...
![Page 1: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/1.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointers
Comp Sci 1575 Data Structures
![Page 2: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/2.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointers
“Writing in C or C++ is like running a chain saw with all thesafety guards removed,” Bob Gray.
![Page 3: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/3.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointers
![Page 4: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/4.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 5: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/5.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Data Structures yet?
• We are finishing C++ first, and won’t start the actualData Structures material for a while.
• Reserve judgment about how fun you consider the materialto be until then!
![Page 6: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/6.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 7: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/7.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Definition of a pointer
• A pointer is a variable whose value is the address ofanother variable.
• What is an address?
• How do you get the memory address of a variable?
![Page 8: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/8.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 9: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/9.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Address of an int?
How do you get the memory address of an int for example?
i n t genePos = 4 3 5 ;cout << &genePos << e n d l ; // 0 x7 f f cb158c144
• & is the “address of” operator
• What is that weird number?
• How is memory structured?
• It is different than, but similar to the reference typespecified with & (more to come later)
![Page 10: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/10.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 11: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/11.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Memory as a tape
i n t genePos = 4 3 5 ;cout << &genePos << e n d l ; // 0 x7 f f cb158c144
Name of variable Storage address Value
0x7ffcb158c140
genePos 0x7ffcb158c144 435
0x7ffcb158c148
0x7ffcb158c14c
0x7ffcb158c150
0x7ffcb158c154
• Variable name is an alias for address itself,which is accessible via the & operator
![Page 12: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/12.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 13: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/13.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
What is a pointer?
i n t genePos = 4 3 5 ;i n t ∗p1 = &genePos ;cout << p1 << e n d l ; // 0 x7 f f cb158c144
Name of variable Storage address Value
0x7ffcb158c140
genePos 0x7ffcb158c144 435
0x7ffcb158c148
0x7ffcb158c14c
p1 0x7ffcb158c150 0x7ffcb158c144
0x7ffcb158c154
• p1 is a pointer – a variable whose value is the address ofanother variable.
![Page 14: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/14.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Kahoot
![Page 15: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/15.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 16: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/16.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointer declaration (type specific)
• Like other variables or constants, pointers must bedeclared
• General pointer variable declaration is:type ∗ pointerName = &varNamewhere type is the pointer’s base type
• Pointers have a type (of the thing they address) restriction(e.g., type is “pointer to an int” or “pointer to a double”)
• Can cast between pointer types, e.g., static cast, butshould not generally to non-pointer types. This won’tusually be needed.
Declaring types of pointers:
i n t ∗numberObject ; // p o i n t e r to an i n tchar ∗ c h a r a c t e r O b j e c t ; // p o i n t e r to a cha rdouble ∗ d e c i m a l O b j e c t ; // p o i n t e r to a doub l e
![Page 17: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/17.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointer declaration
i n t ∗p1 , ∗p2 ; // both p1 and p2 a r e p o i n t e r si n t ∗p1 , p2 ; // p2 i s not a p o i n t e r !
![Page 18: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/18.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 19: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/19.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointer initialization variations
i n t genePos ; // what i s the v a l u e o f genePos ?i n t ∗p1 = &genePos ;
i n t genePos ;i n t ∗p1 ; // what does p1 po i n t to ?p1 = &genePos ;
i n t genePos ;i n t ∗p1 = &genePos ;i n t ∗p2 = p1 ;
// To s p e c i f y no t a r g e ti n t genePos ;i n t ∗p1 = n u l l p t r ; // or =NULL , or =0 ( o l d C++)// Use n u l l p t r f o r t h i s c l a s s !
![Page 20: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/20.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 21: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/21.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Contents of object being pointed to
i n t genePos = 4 3 5 ;i n t ∗p1 = &genePos ;cout << ∗p1 << e n d l ; // outpu t s : 435i n t x = ∗p1 ;cout << x << e n d l ; // outpu t s : 435
Name of variable Storage address Value
0x7ffcb158c140
genePos 0x7ffcb158c144 435
0x7ffcb158c148
0x7ffcb158c14c
p1 0x7ffcb158c150 0x7ffcb158c144
0x7ffcb158c154
• Contents of operator also known as derefernece operator, *
• This is not the same as the * used during initialization;the * on lines 2 and 3 are different
![Page 22: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/22.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Assignment via dereferenced pointer
i n t genePos = 4 3 5 ;i n t ∗p1 = &genePos ;cout << ∗p1 << e n d l ; // outpu t s : 435∗p1 = 2 4 8 ;cout << ∗p1 << e n d l ; // outpu t s : 248
Name of variable Storage address Value
0x7ffcb158c140
genePos 0x7ffcb158c144 435 changed to 248
0x7ffcb158c148
0x7ffcb158c14c
p1 0x7ffcb158c150 0x7ffcb158c144
0x7ffcb158c154
![Page 23: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/23.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 24: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/24.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Why are pointers useful?
• Used for new memory during execution,e.g., dynamic memory
• Which is useful for what?User-defined quantities or sized of objects
• Can refer/pass large data structures without copying,for efficiency
• Can specify relationships among data,e.g., linked lists, trees, graphs, coming up
![Page 25: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/25.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 26: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/26.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointers are dangerous
With great power comes great responsibility! You can breakmore fundamental things with pointers... Get ready forsegfaults.
![Page 27: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/27.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 28: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/28.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Address of address of?
i n t genePos = 4 3 5 ;i n t ∗p1 = &genePos ;i n t ∗∗metaP = &p1 ;cout << metaP << e n d l ; // ??cout << ∗metaP << e n d l ; // ??cout << ∗∗metaP << e n d l ; // ??
Name of variable Storage address Value
0x7ffcb158c140
genePos 0x7ffcb158c144 435
0x7ffcb158c148
0x7ffcb158c14c
p1 0x7ffcb158c150 0x7ffcb158c144
metaP 0x7ffcb158c154 0x7ffcb158c150
Remember, ** for declaring and dereferencing are different,as are the two *
![Page 29: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/29.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 30: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/30.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
What about these statements?
cout << &∗p1 << e n d l ; // ??cout << ∗&p1 << e n d l ; // ??cout << &∗&∗p1 << e n d l ; // ??cout << ∗&∗&p1 << e n d l ; // ??
Name of variable Storage address Value
0x7ffcb158c140
genePos 0x7ffcb158c144 435
0x7ffcb158c148
0x7ffcb158c14c
p1 0x7ffcb158c150 0x7ffcb158c144
metaP 0x7ffcb158c154 0x7ffcb158c150
![Page 31: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/31.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 32: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/32.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 33: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/33.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Kahoot
![Page 34: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/34.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointers and arrays
What is an array really?
![Page 35: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/35.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointers and arrays
What is an array really?
i n t a [ 6 ] = {1 , 7 , 3 , 4 , 2 , 8} ;cout << a [ 2 ] << e n d l ; // ou tpu t s : 3cout << a << e n d l ; // ??cout << ∗a << e n d l ; // ??
![Page 36: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/36.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointers and arrays
• Arrays are like pointers, but const, addressing the firstelement of the array• Below, mypointer can be assigned a different address, but
myarray can’t.
i n t myarray [ 2 0 ] ;cout << myarray << e n d l ; // 0 x7 f f cb158c140
i n t ∗m y p o i n t e r ;
// Va l id , why no & ope r a t o r b e f o r e myarray ?// R e c a l l p a s s i n g a r r a y s by r e f e r e n c e ?m y p o i n t e r = myarray ;cout << m y p o i n t e r << e n d l ; // 0 x7 f f cb158c140
// I n v a l i d , why?myarray = m y p o i n t e r ;
![Page 37: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/37.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 38: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/38.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointers and arrays
• The following have the same result:
i n t a [ 6 ] = {1 , 7 , 3 , 4 , 2 , 8} ;
a [ 5 ] = 0 ; // a [ o f f s e t o f 5 ] = 0cout << a [ 5 ] << e n d l ; // ou tpu t s : 0cout << ∗( a + 5) << e n d l ; // ou tpu t s : 0
∗( a+5) = 1 ; // a [ o f f s e t o f 5 ] = 1cout << a [ 5 ] << e n d l ; // ou tpu t s : 1cout << ∗( a + 5) << e n d l ; // ou tpu t s : 1
Why does adding 5 to array a work?
![Page 39: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/39.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Outline
1 Data Structures?
2 Definitions
3 AddressesMemory
4 PointersDeclarationInitializationDereference
Dereference assignmentUsesIssues?Pointers to pointersCareful cancellation
5 Pointers and arraysWhat is an array?Array and pointer indexing
6 Pointer arithmeticType sizingOperator precedence
![Page 40: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/40.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointer arithmetic
i n t a [ 6 ] = {1 , 7 , 3 , 4 , 2 , 8} ;i n t ∗pa = a ;cout << pa + 2 << e n d l ; // 0 x7 f f cb158c148cout << ∗( pa + 2) << e n d l ; // 3cout << pa++ << e n d l ; // 0 x7 f f cb158c144cout << ∗pa << e n d l ; // 7
Name of variable Storage address Value
a[0] or *a 0x7ffcb158c140 1
a[1] or *(a+1) 0x7ffcb158c144 7
a[2] or *(a+2) 0x7ffcb158c148 3
a[3] or *(a+3) 0x7ffcb158c14c 4
a[4] or *(a+4) 0x7ffcb158c150 2
a[5] or *(a+5) 0x7ffcb158c154 8
a 0x... 0x7ffcb158c140
pa 0x... 0x7ffcb158c140
• Why increments of 4?
![Page 41: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/41.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Pointer and array arithmetic
i n t ∗pa = a ;cout << pa + 2 << e n d l ; // 0 x7 f f cb158c148cout << a + 2 << e n d l ; // 0 x7 f f cb158c148
cout << ∗( pa+2) << e n d l ; // 3cout << ∗( a+2) << e n d l ; // 3
cout << pa [ 2 ] << e n d l ; // 3cout << a [ 2 ] << e n d l ; // 3
cout << pa++ << e n d l ; // 0 x7 f f cb158c144// cout << a++ << end l ; // not v a l i d , a r r a y con s t
cout << ∗pa << e n d l ; // 7cout << ∗a << e n d l ; // 1
![Page 42: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/42.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Kahoot
![Page 43: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/43.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Each type is a different size
Use sizeof(p) without the ’*’ operator to determine thememory utilized on your system for types like int, which aredifferent per system.
![Page 44: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/44.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Messy pointer arithmetic
Postfix operators (- - , ++), have higher precedence thanprefix operators (dereference *).
i n t genePosArray [ 3 ] = {4 3 5 , 1 2 3 , 9 8 7} ;i n t ∗p = genePosArray ;cout << p << e n d l ; // 0 x7 f f e35b36ee0cout << ∗( p++) << p << e n d l ; // 435 0 x7 f f e35b36ee4p = genePosArray ;cout << ∗p++ << p << e n d l ; // 435 0 x7 f f e35b36ee4p = genePosArray ;cout << ∗(++p ) << p << e n d l ; // 123 0 x7 f f e35b36ee4p = genePosArray ;cout << ∗++p << p << e n d l ; // 123 0 x7 f f e35b36ee4p = genePosArray ;cout << ++(∗p ) << p << e n d l ; // 436 x7 f f e35b36ee0p = genePosArray ;cout << ++∗p << p << e n d l ; // 437 x7 f f e35b36ee0p = genePosArray ;cout << (∗p)++ << p << e n d l ; // 437 x7 f f e35b36ee0
![Page 45: Pointers - MST · Like other variables or constants, pointers must be declared General pointer variable declaration is: type pointerName = &varName where type is the pointer’s base](https://reader034.fdocuments.net/reader034/viewer/2022042803/5f4a84a45e9b6e5d0c1084c8/html5/thumbnails/45.jpg)
DataStructures?
Definitions
Addresses
Memory
Pointers
Declaration
Initialization
Dereference
Dereferenceassignment
Uses
Issues?
Pointers to pointers
Careful cancellation
Pointers andarrays
What is an array?
Array and pointerindexing
Pointerarithmetic
Type sizing
Operatorprecedence
Next time
Dynamic memory (heap, stack, garbage collection, danglingpointers), pointers to classes and structs, const pointers, arraysof pointers, void pointers, pointers to functions, returningpointers from functions