Review on pointers and dynamic objects - PowerPoint PPT Presentation

About This Presentation
Title:

Review on pointers and dynamic objects

Description:

Memory Management Static Memory Allocation Memory is allocated at compiling time Dynamic Memory Memory is allocated at running time Static vs. Dynamic Objects Static ... – PowerPoint PPT presentation

Number of Views:118
Avg rating:3.0/5.0
Slides: 24
Provided by: AndrewH164
Category:

less

Transcript and Presenter's Notes

Title: Review on pointers and dynamic objects


1
  • Review on pointers and dynamic objects

2
Memory Management
  • Static Memory Allocation
  • Memory is allocated at compiling time
  • Dynamic Memory
  • Memory is allocated at running time

int a200
int n cin gtgt n an???
3
Static vs. Dynamic Objects
  • Static object
  • Memory is acquired automatically
  • Memory is returned automatically when object goes
    out of scope
  • Dynamic object
  • Memory is acquired by program with an allocation
    request
  • new operation
  • Dynamic objects can exist beyond the function in
    which they were allocated
  • Object memory is returned by a deallocation
    request
  • delete operation

4
Why pointers?
  • Dynamic objects are implemented or realized
    by pointers which are parts of low-level
    physical memory
  • We dont like it, but can not avoid it.
  • Low level languages directly manipulate them
  • High level languages want to hide the pointers
    (conceptually remove them)

5
Pointers
  • A pointer is a variable used for storing the
    address of a memory cell.
  • We can use the pointer to reference this memory
    cell

Memory address
1024
1020
10032


1024


100
a
int a int p
Integer a
Pointer p
6
Getting an address address operator
int a100 a ? the address of a
Memory address
1024
1020
100





a
int a 100 cout ltlt a ? 100 Cout ltlt a ?
1024
7
Dereferencing Operator
  • We can access to the value stored in the variable
    pointed to by preceding the pointer with the
    star operator (),

Memory address
1024
10032
1020
100
88

1024


a
p
int a 100 int p a cout ltlt a ltlt endl cout
ltlt a ltlt endl cout ltlt p ltlt " " ltlt p ltlt
endl cout ltlt p ltlt endl
p gives 100
8
Pointer to pointer
int a int p int q
a 58 p a q p
a, p, and q are the same object whose value is
58! But q a is illegal!
9
  • An asterisk () has two usages
  • In a definition, an asterisk indicates that the
    object is a pointer.
  • char s // s is of type pointer to char
  • (char s is possible)
  • In expressions, an asterisk before a pointer
    indicates the object the pointer pointed to,
    called dereferencing
  • int i 1, j
  • int ptr // ptr is an int pointer
  • ptr i // ptr points to i
  • j ptr 1 // j is assigned 2
  • cout ltlt ptr ltlt j ltlt endl // display "12"

10
Writing pointer type properly in C
int a int b
?
int a, b a, b are both integer pointers
int a, b a is integer pointer, b is just
integer!
typedefine int MyInt MyInt k
int k
I dont like this!
Recommended!!!
typedefine int IntPt IntPt a, b
11
Summary
has two usages - pointer type
definition int a
int p -
dereferencing p is an integer variable
if p a has two usages
- getting address p a -
reference int b a
b is an alternative name for a First
application in passing parameters (swap example)
int a10 int b100 int p int q P a Q
b
p q p q
?
?
12
Pointers and References
Reference (implemented as a (const) pointer) is
an abstraction, Not available in C, only in C.
13
Pointer vs. Reference
  • A pointer can be assigned a new value to point at
    a different object, but a reference variable
    always refers to the same object. Assigning a
    reference variable with a new value actually
    changes the value of the referred object.
  • int p
  • int m 10
  • int j m //valid
  • p m //p now points at m
  • int n 12
  • j n //the value of m is set to 12. But j still
    refers to m, not to n.
  • cout ltlt value of m ltlt m ltltendl //value of m
    printed is 12
  • n 36
  • Cout ltlt value of j ltlt j ltlt endl //value of
    j printed is 12
  • p n

14
  • A reference variable is different from a pointer

int x10 int ref Ref x
int x10 int ref x
int ref
x
10
10
x
ref
ref
15
Traditional Pointer Usage
  • void swap(char ptr1, char ptr2)
  • char temp ptr1
  • ptr1 ptr2
  • ptr2 temp
  • int main()
  • char a 'y'
  • char b 'n'
  • swap(a, b)
  • cout ltlt a ltlt b ltlt endl
  • return 0

Uese pass-by-value of pointers to change
variable values C language does not have call by
reference!
16
Pass by Reference (better than pointers)
  • void swap(char y, char z)
  • char temp y
  • y z
  • z temp
  • int main()
  • char a 'y'
  • char b 'n'
  • swap(a, b)
  • cout ltlt a ltlt b ltlt endl
  • return 0

y, z are references, only names, not like ptr1,
ptr2 that are variables
17
Pointers and Arrays
  • Double faces of an array int a10
  • a is the name of an array,
  • a is also is a constant pointer to its first
    element

18
Pointers and Arrays
The name of an array points only to the first
element not the whole array.
2
a0
a
4
a1
6
a2
8
a3
22
a4
19
Dereference of an array name
include ltiostreamgt Using namespace std void
main() int a5 2,4,6,8,22 cout ltlt a ltlt
" " ltlt a0 ltlt " " ltlt
(a0) ..." //main
2
a0
Result is 2 2 2
4
a1
6
a2
8
a3
22
a4
This element is called a0 or a
20
Array name as pointer
  • To access an array, any pointer to the first
    element can be used instead of the name of the
    array.

We could replace p by a
include ltiostreamgt Using namespace std void
main() int a5 2,4,6,8,22 int p
a int i 0 cout ltlt ai ltlt " " ltlt
p ...
2
2
a
21
dynamic objects
22
Summary
Static variables (objects)
Dynamic variables (objects)
A (direct) named memory location
A static part (pointer) (indirect) nameless
memory location (dynamic part)
int a a 20
int pa pa new int pa 20
20
20
a
pa
static
dynamic
static
23
Dynamic array
Simple dynamic variable
int p new int p 10 delete p
int p new int100 for (i1ilt100i) pi
10 delete p
10
10
10
10
p
p
  • delete two actions
  • Return the object pointed to
  • Point the pointer p to NULL

delete p is not sufficient for an array!!!
Write a Comment
User Comments (0)
About PowerShow.com