SlideShare a Scribd company logo
A First Book of C++A First Book of C++
Chapter 8 (Pt 2)Chapter 8 (Pt 2)
Arrays and PointersArrays and Pointers
∗ In this chapter, you will learn about:
∗ Introduction to Pointers
∗ Array Names as Pointers
∗ Pointer Arithmetic
∗ Passing Addresses
∗ Common Programming Errors
A First Book of C++ 4th Edition 2
Objectives
∗ If grade is a single-dimensional array containing five
integers, the fourth element is grade[3]
∗ C++ compiler computation of the address of grade[3]:
(assuming 4 bytes per integer)
&grade[3] = &grade[0] + (3 * 4)
col*byte size (offset)
∗ This statement reads as “the address of grade[3] equals
the address of grade[0] plus 12”
∗ Figure 8.12 illustrates the address computation used to locate
grade[3]
A First Book of C++ 4th Edition 3
Array Names as Pointers
A First Book of C++ 4th Edition 4
Array Names as Pointers (cont'd.)
∗ Offset: number of positions beyond first element in
array
∗ Using offset, we can simulate process used by
computer to access array elements
∗ Example (Figure 8.14 and Table 8.1):
∗ Store address of grade[0] in pointer gPtr
∗ Use offset to find location of grade[3]
∗ Expression *(gPtr + 3) references variable that is
three integers beyond variable pointed to by gPtr
A First Book of C++ 4th Edition 5
Array Names as Pointers (cont'd.)
A First Book of C++ 4th Edition 6
Array Names as Pointers (cont'd.)
A First Book of C++ 4th Edition 7
Array Names as Pointers (cont'd.)
//Program 8.6 – Method 1, assign starting address to pointer
#include <iostream>
using namespace std;
int main()
{
const int ARRAYSIZE = 5;
int *gptr; // declare a pointer to an int
int i, grade[ARRAYSIZE] = {98,87,92,79,85};
gptr = &grade[0]; // store starting of array address
for (i=0; i < ARRAYSIZE; i++)
cout << “nElement ” << i << “ is “ << *(gptr + i);
cout << endl;
return 0;
}
Accessing Array Elements using Pointers 1Accessing Array Elements using Pointers 1
A First Book of C++ 4th Edition 8
//Program 8.7 – Method 2, use array itself as pointer
#include <iostream>
using namespace std;
int main()
{
const int ARRAYSIZE = 5;
int i, grade[ARRAYSIZE] = {98,87,92,79,85};
for (i=0; i < ARRAYSIZE; i++)
cout << “nElement ” << i << “ is “ << *(grade + i);
cout << endl;
return 0;
}
Accessing Array Elements Using Pointers 2Accessing Array Elements Using Pointers 2
A First Book of C++ 4th Edition 9
∗ Static array allocation: as variables are defined,
storage is assigned from a memory pool
∗ Specific memory locations are fixed for life of a variable,
used or not
∗ Example: function requests storage for an array of
500 integers
∗ If application requires less than 500 integers, unused
storage is not released until array goes out of scope
∗ If more than 500 integers required, array size must be
increased and the function recompiled
A First Book of C++ 4th Edition 10
Dynamic Array Allocation
∗ Dynamic allocation: storage allocated is determined
and adjusted as program is run
∗ Useful when dealing with lists
∗ Allows list to expand and contract as list items are
added and deleted
∗ Example: constructing list of grades
∗ Don’t know number of grades ultimately needed
∗ Need a mechanism to enlarge and shrink array
∗ new and delete operators: provide capability
A First Book of C++ 4th Edition 11
Dynamic Array Allocation (cont’d.)
A First Book of C++ 4th Edition 12
Dynamic Array Allocation (cont'd.)
∗ Dynamic storage requests for scalar variables or
arrays made in declaration or assignment statements
∗ Example 1 (assign value to pointer upon declaration):
int *num = new int;
∗ Reserves space for an integer variable
∗ Stores address of this variable into pointer num
A First Book of C++ 4th Edition 13
Dynamic Array Allocation (cont'd.)
∗ Example 2: same function as Example 1
(declare pointer first, assign value in next statement)
int *num;
num = new int;
∗ Heap: free storage area of a computer
∗ Consists of unallocated memory, can be allocated to a
running program
∗ In Examples 1 and 2, new storage comes from free
storage area (heap)
A First Book of C++ 4th Edition 14
Dynamic Array Allocation (cont'd.)
∗ Example of dynamic allocation of an array:
int *grade = new int[200];
∗ Statement reserves storage for 200 integers and places address
of first integer into pointer grade
∗ Same example with variable dimension
cout << "Enter the number of grades to be"
<< " processed: ";
cin >> numgrades;
int *grades = new int[numgrades];
∗ Size of array depends on user input
∗ Values accessed by array notation: grades[i]
∗ Values accessed by pointer notation: *(grades+i)
A First Book of C++ 4th Edition 15
Dynamic Array Allocation (cont'd.)
∗ By adding to and subtracting from pointers, we can
obtain different addresses
∗ Pointers can be compared using relational operators (
==, !=, <, >, etc.)
∗ Consider declarations:
int nums[100];
int *nPt;
∗ Set address of nums[0] into nPt using:
nPt = &nums[0];
nPt = nums;
A First Book of C++ 4th Edition 16
Pointer Arithmetic
similar (an array is by default a pointer)
∗ After nPt is assigned a valid address, values can be
added or subtracted to produce new addresses
∗ Scaling: automatic adjustment of computed address,
ensures points to value of correct type
∗ Example: nPt = nPt + 4;
∗ Assuming an integer requires 4 bytes, the computer
multiplies 4 by 4 and adds 16 to the address in nPt
A First Book of C++ 4th Edition 17
Pointer Arithmetic (cont'd.)
computing new address
A First Book of C++ 4th Edition 18
Pointer Arithmetic (cont'd.)
+4 bytes +4 bytes +4 bytes +4 bytes
∗ Pointers can be initialized when declared
∗ Example: int *ptNum = &miles;
∗ Above initialization valid only if miles was declared as an integer
prior to above statement
∗ The following statements produce an error
int *ptNum = &miles;//miles not declared yet
int miles;
∗ Arrays can be initialized within declarations
double *zing = &prices[0];
∗ This statement is valid if prices has already been declared as
a double-precision array
A First Book of C++ 4th Edition 19
Pointer Initialization
∗ Passing addresses to function using reference
variables was addressed in Chapter 6
∗ Implied use of addresses because the reference does
provide the function with an address
∗ The function call swap(num1, num2) does not tell
whether parameters are passed by value or reference
∗ Must look at function prototype or header line to
determine
A First Book of C++ 4th Edition 20
Passing Addresses
∗ Explicit passing of an address to a function: place the
address operator (&) in front of variable being passed
∗ Example (Figure 8.19 and Program 8.11):
swap(&firstnum, &secnum);//in function call
∗ This function call passes the addresses of firstnum and
secnum to swap()
∗ Explicitly passing addresses using the address operator is
effectively a pass by reference
A First Book of C++ 4th Edition 21
Passing Addresses (cont'd.)
A First Book of C++ 4th Edition 22
Passing Addresses (cont'd.)
A First Book of C++ 4th Edition 23
Passing Addresses (cont'd.)
∗ When array is passed to a function, address of first
location is the only item passed
∗ Program 8.13 passes an array to a function using
conventional array notation
A First Book of C++ 4th Edition 24
Passing Arrays
A First Book of C++ 4th Edition 25
//vals = &nums[0]
∗ Parameter vals in header line declaration for
findMax() in Program 8.13 actually receives the
address of array nums
∗ Thus, val is really a pointer
∗ Another suitable header line for findMax() is:
int findMax(int *vals, int numels)
// here vals is declared as a pointer
// to an integer
A First Book of C++ 4th Edition 26
Passing Arrays (cont'd.)
∗ Access to multidimensional arrays can be made using
pointer notation
∗ Example: consider the declaration:
int nums[2][3] = { {16,18,20},
{25,26,27} };
∗ Creates an array of elements and a set of pointer
constants named nums, nums[0], and nums[1] (as
shown in Figure 8.26)
A First Book of C++ 4th Edition 27
Advanced Pointer Notation
Advanced Pointer Notation (cont'd.)Advanced Pointer Notation (cont'd.)
A First Book of C++ 4th Edition 28
∗ Two-dimensional array pointer constants allow for
accessing array elements in several ways
∗ Address of first element in first row of nums is
nums[0]
∗ Address of first element in second row is nums[1]
∗ Variable pointed to by nums[0] is num[0][0]
∗ Variable pointed to by nums[1] is num[1][0]
∗ Each element can be accessed by applying an offset
to the correct pointer
A First Book of C++ 4th Edition 29
Advanced Pointer Notation (cont'd.)
A First Book of C++ 4th Edition 30
Advanced Pointer Notation (cont'd.)
Pointer Notation Subscript Notation Values
*(*nums) nums[0][0] 16
*(*nums + 1) nums[0][1] 18
*(*nums + 2) nums[0][2] 20
*(*(nums + 1)) nums[1][0] 25
*(*(nums + 1) + 1) nums[1][1] 26
*(*(nums + 1) + 2) nums[1][2] 27
∗ Attempting to explicitly store an address in a variable that
has not been declared as a pointer
∗ Using a pointer to access nonexistent array elements
∗ Incorrectly applying address and indirection operators
∗ If pt is a pointer variable, the expressions:
pt = &45 //must be variable name, e.g:&num
pt = &(miles + 10)//&(miles + num)-> ok
are both invalid because they attempt to take
the address of a value
A First Book of C++ 4th Edition 31
Common Programming Errors
∗ Taking addresses of pointer constants
∗ For example, given the declarations:
int nums[25];
int *pt;
the assignment pt = &nums; //INVALID
∗ nums is a pointer constant that is itself equivalent to an
address; the correct assignment is :
pt = nums OR pt = &nums[0]
∗ Taking addresses of a reference argument, reference
variable, or register variable
A First Book of C++ 4th Edition 32
Common Programming Errors
(cont'd.)
∗ Initializing pointer variables incorrectly
∗ Initialization int *pt = 5; // INVALID
∗ pt is a pointer to an integer; it must be initialized with a valid
address
∗ Becoming confused about whether a variable contains an
address or is an address
int &dist = miles; // contains an address or is an address???
int dist = &miles; // contains an address or is an address???
∗ Forgetting to use the bracket set, [ ], after the delete or
new operator when dynamically allocating or deallocating
memory
A First Book of C++ 4th Edition 33
Common Programming Errors
(cont'd.)
∗ Every variable has: data type, address, value
∗ A pointer is a variable that is used to store the address
of another variable
∗ An array name is a pointer constant
∗ Access to an array element using a subscript can
always be replaced using a pointer
∗ Arrays can be dynamically created as a program is
executing
A First Book of C++ 4th Edition 34
Summary
∗ Arrays are passed to functions as addresses
∗ When a single-dimensional array is passed to a
function, the parameter declaration for the function
can be either an array declaration or a pointer
declaration
∗ Pointers can be incremented, decremented,
compared, and assigned
A First Book of C++ 4th Edition 35
Summary (cont'd.)

More Related Content

What's hot (20)

PPTX
Three Address code
Pooja Dixit
 
PPSX
Pointers
Frijo Francis
 
PPTX
Computer Science Assignment Help
Programming Homework Help
 
PPT
Arrays
archikabhatia
 
PPTX
Used of Pointer in C++ Programming
Abdullah Jan
 
PPT
Pointers+(2)
Rubal Bansal
 
PPTX
Software Construction Assignment Help
Programming Homework Help
 
PPS
C programming session 05
Vivek Singh
 
PDF
10. array & pointer
웅식 전
 
PPTX
Three address code generation
Rabin BK
 
PPTX
Algorithm Homework Help
Programming Homework Help
 
PPT
Chapter Eight(1)
bolovv
 
PDF
Python lambda functions with filter, map & reduce function
ARVIND PANDE
 
PDF
Multi dimensional array
Rajendran
 
PPTX
Learning C++ - Pointers in c++ 2
Ali Aminian
 
PDF
Pointers_c
ahmed safwat
 
PPT
pointers
teach4uin
 
PPTX
Electrical Engineering Exam Help
Live Exam Helper
 
Three Address code
Pooja Dixit
 
Pointers
Frijo Francis
 
Computer Science Assignment Help
Programming Homework Help
 
Used of Pointer in C++ Programming
Abdullah Jan
 
Pointers+(2)
Rubal Bansal
 
Software Construction Assignment Help
Programming Homework Help
 
C programming session 05
Vivek Singh
 
10. array & pointer
웅식 전
 
Three address code generation
Rabin BK
 
Algorithm Homework Help
Programming Homework Help
 
Chapter Eight(1)
bolovv
 
Python lambda functions with filter, map & reduce function
ARVIND PANDE
 
Multi dimensional array
Rajendran
 
Learning C++ - Pointers in c++ 2
Ali Aminian
 
Pointers_c
ahmed safwat
 
pointers
teach4uin
 
Electrical Engineering Exam Help
Live Exam Helper
 

Viewers also liked (20)

PPT
Algo>Arrays
Ain-ul-Moiz Khawaja
 
PPT
International Market entry strategies: Agency Model
Prakaash Govindasamy
 
PDF
SPIRIT AWARD Q4 spirit Magazine
Tegan Marroquin
 
DOCX
Group project overall
IIUM
 
PDF
Introduction fundamentals sets and sequences (notes)
IIUM
 
PPTX
Csc1100 lecture01 ch01 pt2-paradigm (1)
IIUM
 
ODP
Museo De Genalguacil
bertha reyes
 
PPTX
Uso de comandos insert, update y delete en bases de datos de sql server
Pedrangas Pedrangas
 
ODP
C++ arrays part1
Subhasis Nayak
 
PDF
Substituindo o request message no mule
Jeison Barros
 
PPT
Array
Hajar
 
PDF
C++ L04-Array+String
Mohammad Shaker
 
PDF
Educational issues in the context of urbanization, globalization and privatiz...
Hathib KK
 
DOCX
Hex bolt drawings
girishdn
 
PDF
Aprendizaje in 2
JHONN JAIRO ANGARITA LOPEZ
 
PDF
Aprendizaje invisible 2
JHONN JAIRO ANGARITA LOPEZ
 
PPT
9781285852744 ppt ch08
Terry Yoast
 
PPT
Arrays Class presentation
Neveen Reda
 
PDF
7079581 quantitative-techniques-for-management
lakshmi narayana murthy
 
PPT
Array Presentation (EngineerBaBu.com)
EngineerBabu
 
Algo>Arrays
Ain-ul-Moiz Khawaja
 
International Market entry strategies: Agency Model
Prakaash Govindasamy
 
SPIRIT AWARD Q4 spirit Magazine
Tegan Marroquin
 
Group project overall
IIUM
 
Introduction fundamentals sets and sequences (notes)
IIUM
 
Csc1100 lecture01 ch01 pt2-paradigm (1)
IIUM
 
Museo De Genalguacil
bertha reyes
 
Uso de comandos insert, update y delete en bases de datos de sql server
Pedrangas Pedrangas
 
C++ arrays part1
Subhasis Nayak
 
Substituindo o request message no mule
Jeison Barros
 
Array
Hajar
 
C++ L04-Array+String
Mohammad Shaker
 
Educational issues in the context of urbanization, globalization and privatiz...
Hathib KK
 
Hex bolt drawings
girishdn
 
Aprendizaje in 2
JHONN JAIRO ANGARITA LOPEZ
 
Aprendizaje invisible 2
JHONN JAIRO ANGARITA LOPEZ
 
9781285852744 ppt ch08
Terry Yoast
 
Arrays Class presentation
Neveen Reda
 
7079581 quantitative-techniques-for-management
lakshmi narayana murthy
 
Array Presentation (EngineerBaBu.com)
EngineerBabu
 
Ad

Similar to Csc1100 lecture12 ch08_pt2 (20)

PPT
Csc1100 lecture07 ch07_pt1-1
IIUM
 
PPT
Csc1100 lecture09 ch07_pt2
IIUM
 
PPTX
C++ - UNIT_-_IV.pptx which contains details about Pointers
ANUSUYA S
 
PDF
C++ computer language chapter 4 pointers.pdf
birukh36
 
PPTX
C++ Pointer | Introduction to programming
mahidazad00
 
PDF
(4) cpp automatic arrays_pointers_c-strings
Nico Ludwig
 
PPT
C96e1 session3 c++
Mukund Trivedi
 
PPTX
Pf cs102 programming-9 [pointers]
Abdullah khawar
 
PPT
Programming in Computer Science- Pointers in C++.ppt
richardbaahnkansah
 
PPT
Pointer
manish840
 
PPT
Pointer
Fahuda E
 
PPTX
Object Oriented Programming using C++: Ch10 Pointers.pptx
RashidFaridChishti
 
PPT
FP 201 - Unit 6
rohassanie
 
PPT
Data structure and problem solving ch05.ppt
Ping261512
 
PPT
Pointers
sanya6900
 
PPT
ch08.ppt
NewsMogul
 
PDF
Multidimensional arrays in C++
Ilio Catallo
 
PPT
C/C++ Pointers explanationwith different examples
ulhaq18
 
PPT
Pointers_in_c.pptfffgfggdggffffrreeeggttr
MorfaSafi
 
PDF
CS225_Prelecture_Notes 2nd
Edward Chen
 
Csc1100 lecture07 ch07_pt1-1
IIUM
 
Csc1100 lecture09 ch07_pt2
IIUM
 
C++ - UNIT_-_IV.pptx which contains details about Pointers
ANUSUYA S
 
C++ computer language chapter 4 pointers.pdf
birukh36
 
C++ Pointer | Introduction to programming
mahidazad00
 
(4) cpp automatic arrays_pointers_c-strings
Nico Ludwig
 
C96e1 session3 c++
Mukund Trivedi
 
Pf cs102 programming-9 [pointers]
Abdullah khawar
 
Programming in Computer Science- Pointers in C++.ppt
richardbaahnkansah
 
Pointer
manish840
 
Pointer
Fahuda E
 
Object Oriented Programming using C++: Ch10 Pointers.pptx
RashidFaridChishti
 
FP 201 - Unit 6
rohassanie
 
Data structure and problem solving ch05.ppt
Ping261512
 
Pointers
sanya6900
 
ch08.ppt
NewsMogul
 
Multidimensional arrays in C++
Ilio Catallo
 
C/C++ Pointers explanationwith different examples
ulhaq18
 
Pointers_in_c.pptfffgfggdggffffrreeeggttr
MorfaSafi
 
CS225_Prelecture_Notes 2nd
Edward Chen
 
Ad

More from IIUM (20)

PDF
How to use_000webhost
IIUM
 
PDF
Chapter 2
IIUM
 
PDF
Chapter 1
IIUM
 
PDF
Kreydle internship-multimedia
IIUM
 
PDF
03phpbldgblock
IIUM
 
PDF
Chap2 practice key
IIUM
 
PDF
Group p1
IIUM
 
PDF
Tutorial import n auto pilot blogspot friendly seo
IIUM
 
PDF
Visual sceneperception encycloperception-sage-oliva2009
IIUM
 
PDF
03 the htm_lforms
IIUM
 
PDF
Exercise on algo analysis answer
IIUM
 
PDF
Redo midterm
IIUM
 
PDF
Heaps
IIUM
 
PDF
Report format
IIUM
 
PDF
Edpuzzle guidelines
IIUM
 
PDF
Final Exam Paper
IIUM
 
PDF
Final Exam Paper
IIUM
 
PDF
Group assignment 1 s21516
IIUM
 
PDF
Avl tree-rotations
IIUM
 
PDF
Week12 graph
IIUM
 
How to use_000webhost
IIUM
 
Chapter 2
IIUM
 
Chapter 1
IIUM
 
Kreydle internship-multimedia
IIUM
 
03phpbldgblock
IIUM
 
Chap2 practice key
IIUM
 
Group p1
IIUM
 
Tutorial import n auto pilot blogspot friendly seo
IIUM
 
Visual sceneperception encycloperception-sage-oliva2009
IIUM
 
03 the htm_lforms
IIUM
 
Exercise on algo analysis answer
IIUM
 
Redo midterm
IIUM
 
Heaps
IIUM
 
Report format
IIUM
 
Edpuzzle guidelines
IIUM
 
Final Exam Paper
IIUM
 
Final Exam Paper
IIUM
 
Group assignment 1 s21516
IIUM
 
Avl tree-rotations
IIUM
 
Week12 graph
IIUM
 

Csc1100 lecture12 ch08_pt2

  • 1. A First Book of C++A First Book of C++ Chapter 8 (Pt 2)Chapter 8 (Pt 2) Arrays and PointersArrays and Pointers
  • 2. ∗ In this chapter, you will learn about: ∗ Introduction to Pointers ∗ Array Names as Pointers ∗ Pointer Arithmetic ∗ Passing Addresses ∗ Common Programming Errors A First Book of C++ 4th Edition 2 Objectives
  • 3. ∗ If grade is a single-dimensional array containing five integers, the fourth element is grade[3] ∗ C++ compiler computation of the address of grade[3]: (assuming 4 bytes per integer) &grade[3] = &grade[0] + (3 * 4) col*byte size (offset) ∗ This statement reads as “the address of grade[3] equals the address of grade[0] plus 12” ∗ Figure 8.12 illustrates the address computation used to locate grade[3] A First Book of C++ 4th Edition 3 Array Names as Pointers
  • 4. A First Book of C++ 4th Edition 4 Array Names as Pointers (cont'd.)
  • 5. ∗ Offset: number of positions beyond first element in array ∗ Using offset, we can simulate process used by computer to access array elements ∗ Example (Figure 8.14 and Table 8.1): ∗ Store address of grade[0] in pointer gPtr ∗ Use offset to find location of grade[3] ∗ Expression *(gPtr + 3) references variable that is three integers beyond variable pointed to by gPtr A First Book of C++ 4th Edition 5 Array Names as Pointers (cont'd.)
  • 6. A First Book of C++ 4th Edition 6 Array Names as Pointers (cont'd.)
  • 7. A First Book of C++ 4th Edition 7 Array Names as Pointers (cont'd.)
  • 8. //Program 8.6 – Method 1, assign starting address to pointer #include <iostream> using namespace std; int main() { const int ARRAYSIZE = 5; int *gptr; // declare a pointer to an int int i, grade[ARRAYSIZE] = {98,87,92,79,85}; gptr = &grade[0]; // store starting of array address for (i=0; i < ARRAYSIZE; i++) cout << “nElement ” << i << “ is “ << *(gptr + i); cout << endl; return 0; } Accessing Array Elements using Pointers 1Accessing Array Elements using Pointers 1 A First Book of C++ 4th Edition 8
  • 9. //Program 8.7 – Method 2, use array itself as pointer #include <iostream> using namespace std; int main() { const int ARRAYSIZE = 5; int i, grade[ARRAYSIZE] = {98,87,92,79,85}; for (i=0; i < ARRAYSIZE; i++) cout << “nElement ” << i << “ is “ << *(grade + i); cout << endl; return 0; } Accessing Array Elements Using Pointers 2Accessing Array Elements Using Pointers 2 A First Book of C++ 4th Edition 9
  • 10. ∗ Static array allocation: as variables are defined, storage is assigned from a memory pool ∗ Specific memory locations are fixed for life of a variable, used or not ∗ Example: function requests storage for an array of 500 integers ∗ If application requires less than 500 integers, unused storage is not released until array goes out of scope ∗ If more than 500 integers required, array size must be increased and the function recompiled A First Book of C++ 4th Edition 10 Dynamic Array Allocation
  • 11. ∗ Dynamic allocation: storage allocated is determined and adjusted as program is run ∗ Useful when dealing with lists ∗ Allows list to expand and contract as list items are added and deleted ∗ Example: constructing list of grades ∗ Don’t know number of grades ultimately needed ∗ Need a mechanism to enlarge and shrink array ∗ new and delete operators: provide capability A First Book of C++ 4th Edition 11 Dynamic Array Allocation (cont’d.)
  • 12. A First Book of C++ 4th Edition 12 Dynamic Array Allocation (cont'd.)
  • 13. ∗ Dynamic storage requests for scalar variables or arrays made in declaration or assignment statements ∗ Example 1 (assign value to pointer upon declaration): int *num = new int; ∗ Reserves space for an integer variable ∗ Stores address of this variable into pointer num A First Book of C++ 4th Edition 13 Dynamic Array Allocation (cont'd.)
  • 14. ∗ Example 2: same function as Example 1 (declare pointer first, assign value in next statement) int *num; num = new int; ∗ Heap: free storage area of a computer ∗ Consists of unallocated memory, can be allocated to a running program ∗ In Examples 1 and 2, new storage comes from free storage area (heap) A First Book of C++ 4th Edition 14 Dynamic Array Allocation (cont'd.)
  • 15. ∗ Example of dynamic allocation of an array: int *grade = new int[200]; ∗ Statement reserves storage for 200 integers and places address of first integer into pointer grade ∗ Same example with variable dimension cout << "Enter the number of grades to be" << " processed: "; cin >> numgrades; int *grades = new int[numgrades]; ∗ Size of array depends on user input ∗ Values accessed by array notation: grades[i] ∗ Values accessed by pointer notation: *(grades+i) A First Book of C++ 4th Edition 15 Dynamic Array Allocation (cont'd.)
  • 16. ∗ By adding to and subtracting from pointers, we can obtain different addresses ∗ Pointers can be compared using relational operators ( ==, !=, <, >, etc.) ∗ Consider declarations: int nums[100]; int *nPt; ∗ Set address of nums[0] into nPt using: nPt = &nums[0]; nPt = nums; A First Book of C++ 4th Edition 16 Pointer Arithmetic similar (an array is by default a pointer)
  • 17. ∗ After nPt is assigned a valid address, values can be added or subtracted to produce new addresses ∗ Scaling: automatic adjustment of computed address, ensures points to value of correct type ∗ Example: nPt = nPt + 4; ∗ Assuming an integer requires 4 bytes, the computer multiplies 4 by 4 and adds 16 to the address in nPt A First Book of C++ 4th Edition 17 Pointer Arithmetic (cont'd.) computing new address
  • 18. A First Book of C++ 4th Edition 18 Pointer Arithmetic (cont'd.) +4 bytes +4 bytes +4 bytes +4 bytes
  • 19. ∗ Pointers can be initialized when declared ∗ Example: int *ptNum = &miles; ∗ Above initialization valid only if miles was declared as an integer prior to above statement ∗ The following statements produce an error int *ptNum = &miles;//miles not declared yet int miles; ∗ Arrays can be initialized within declarations double *zing = &prices[0]; ∗ This statement is valid if prices has already been declared as a double-precision array A First Book of C++ 4th Edition 19 Pointer Initialization
  • 20. ∗ Passing addresses to function using reference variables was addressed in Chapter 6 ∗ Implied use of addresses because the reference does provide the function with an address ∗ The function call swap(num1, num2) does not tell whether parameters are passed by value or reference ∗ Must look at function prototype or header line to determine A First Book of C++ 4th Edition 20 Passing Addresses
  • 21. ∗ Explicit passing of an address to a function: place the address operator (&) in front of variable being passed ∗ Example (Figure 8.19 and Program 8.11): swap(&firstnum, &secnum);//in function call ∗ This function call passes the addresses of firstnum and secnum to swap() ∗ Explicitly passing addresses using the address operator is effectively a pass by reference A First Book of C++ 4th Edition 21 Passing Addresses (cont'd.)
  • 22. A First Book of C++ 4th Edition 22 Passing Addresses (cont'd.)
  • 23. A First Book of C++ 4th Edition 23 Passing Addresses (cont'd.)
  • 24. ∗ When array is passed to a function, address of first location is the only item passed ∗ Program 8.13 passes an array to a function using conventional array notation A First Book of C++ 4th Edition 24 Passing Arrays
  • 25. A First Book of C++ 4th Edition 25 //vals = &nums[0]
  • 26. ∗ Parameter vals in header line declaration for findMax() in Program 8.13 actually receives the address of array nums ∗ Thus, val is really a pointer ∗ Another suitable header line for findMax() is: int findMax(int *vals, int numels) // here vals is declared as a pointer // to an integer A First Book of C++ 4th Edition 26 Passing Arrays (cont'd.)
  • 27. ∗ Access to multidimensional arrays can be made using pointer notation ∗ Example: consider the declaration: int nums[2][3] = { {16,18,20}, {25,26,27} }; ∗ Creates an array of elements and a set of pointer constants named nums, nums[0], and nums[1] (as shown in Figure 8.26) A First Book of C++ 4th Edition 27 Advanced Pointer Notation
  • 28. Advanced Pointer Notation (cont'd.)Advanced Pointer Notation (cont'd.) A First Book of C++ 4th Edition 28
  • 29. ∗ Two-dimensional array pointer constants allow for accessing array elements in several ways ∗ Address of first element in first row of nums is nums[0] ∗ Address of first element in second row is nums[1] ∗ Variable pointed to by nums[0] is num[0][0] ∗ Variable pointed to by nums[1] is num[1][0] ∗ Each element can be accessed by applying an offset to the correct pointer A First Book of C++ 4th Edition 29 Advanced Pointer Notation (cont'd.)
  • 30. A First Book of C++ 4th Edition 30 Advanced Pointer Notation (cont'd.) Pointer Notation Subscript Notation Values *(*nums) nums[0][0] 16 *(*nums + 1) nums[0][1] 18 *(*nums + 2) nums[0][2] 20 *(*(nums + 1)) nums[1][0] 25 *(*(nums + 1) + 1) nums[1][1] 26 *(*(nums + 1) + 2) nums[1][2] 27
  • 31. ∗ Attempting to explicitly store an address in a variable that has not been declared as a pointer ∗ Using a pointer to access nonexistent array elements ∗ Incorrectly applying address and indirection operators ∗ If pt is a pointer variable, the expressions: pt = &45 //must be variable name, e.g:&num pt = &(miles + 10)//&(miles + num)-> ok are both invalid because they attempt to take the address of a value A First Book of C++ 4th Edition 31 Common Programming Errors
  • 32. ∗ Taking addresses of pointer constants ∗ For example, given the declarations: int nums[25]; int *pt; the assignment pt = &nums; //INVALID ∗ nums is a pointer constant that is itself equivalent to an address; the correct assignment is : pt = nums OR pt = &nums[0] ∗ Taking addresses of a reference argument, reference variable, or register variable A First Book of C++ 4th Edition 32 Common Programming Errors (cont'd.)
  • 33. ∗ Initializing pointer variables incorrectly ∗ Initialization int *pt = 5; // INVALID ∗ pt is a pointer to an integer; it must be initialized with a valid address ∗ Becoming confused about whether a variable contains an address or is an address int &dist = miles; // contains an address or is an address??? int dist = &miles; // contains an address or is an address??? ∗ Forgetting to use the bracket set, [ ], after the delete or new operator when dynamically allocating or deallocating memory A First Book of C++ 4th Edition 33 Common Programming Errors (cont'd.)
  • 34. ∗ Every variable has: data type, address, value ∗ A pointer is a variable that is used to store the address of another variable ∗ An array name is a pointer constant ∗ Access to an array element using a subscript can always be replaced using a pointer ∗ Arrays can be dynamically created as a program is executing A First Book of C++ 4th Edition 34 Summary
  • 35. ∗ Arrays are passed to functions as addresses ∗ When a single-dimensional array is passed to a function, the parameter declaration for the function can be either an array declaration or a pointer declaration ∗ Pointers can be incremented, decremented, compared, and assigned A First Book of C++ 4th Edition 35 Summary (cont'd.)