struct w onderwoman int i sis superhero superman int I use short internal arrows to remind myself which elements are uninitialized pointers If a pointer is set to null you should represent it with a line through the box like so ID: 416226
Download Presentation The PPT/PDF document "The superhero" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.
Slide1
The superhero struct
w
onderwoman
(
int)
i
sis
(superhero *)
superman (
int
*[])
I use short internal arrows to remind myself which elements are uninitialized pointers. If a pointer is set to null, you should represent it with a line through the box, like so:Slide2
superhero marineboy[2];Slide3
superhero marineboy[2];
w
onderwoman
(
int)
i
sis
(superhero *)
superman (
int
*[])
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboySlide4
superhero *ironman;
w
onderwoman
(
int)
i
sis
(superhero *)
superman (
int
*[])
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboySlide5
superhero *ironman;
w
onderwoman
(
int)
i
sis
(superhero *)
superman (
int
*[])
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironmanSlide6
ironman = &marineboy[1];
w
onderwoman
(
int)
i
sis
(superhero *)
superman (
int
*[])
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironmanSlide7
ironman = &marineboy[1];
w
onderwoman
(
int)
i
sis
(superhero *)
superman (
int
*[])
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironmanSlide8
marineboy[0].wonderwoman
= 152;
w
onderwoman
(int)
i
sis
(superhero *)
superman (
int
*[])
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironmanSlide9
marineboy[0].wonderwoman
= 152;
w
onderwoman
(int)
152
i
sis
(superhero *)
superman (
int
*[])
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironmanSlide10
marineboy[0].superman[0] = new int
[2];
w
onderwoman
(int)
152
i
sis
(superhero *)
superman (
int
*[])
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironmanSlide11
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboy
[0].superman[0] = new
int
[2];
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heapSlide12
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboy
[0].superman[1] =
&(ironman->
wonderwoman
);
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heapSlide13
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboy
[0].superman[1] =
&(ironman->
wonderwoman
);
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heapSlide14
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboy
[0].superman[1] =
&(ironman->
wonderwoman
);
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heapSlide15
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
marineboy
[0].superman[1] =
&(ironman->
wonderwoman
);
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heapSlide16
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
ironman->superman[0] =
marineboy
[0].superman[1];
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heapSlide17
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
i
ronman->superman[0] =
marineboy
[0].superman[1];
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heapSlide18
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
i
ronman->superman[1] = &(
marineboy
[0].superman[0][1];
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heapSlide19
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
i
ronman->superman[1] = &(marineboy[0].superman[0][1
]);
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heapSlide20
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
*(ironman->superman[1]) = 9189;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heapSlide21
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
*(ironman->superman[1]) = 9189;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heap
9189Slide22
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
m
arineboy
[1].
isis
= ironman->
isis
= ironman;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heap
9189Slide23
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
m
arineboy
[1].
isis
=
ironman->
isis
= ironman
;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heap
9189Slide24
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
m
arineboy
[1].
isis
=
ironman->
isis
= ironman
;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heap
9189Slide25
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
m
arineboy
[1].
isis
= ironman->
isis
= ironman;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heap
9189Slide26
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
State before
Barberella
:
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
stack
heap
9189Slide27
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
In
Barbarella
:
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
We don’t have direct access to
electra
() local variables anymore. At least not by those names!Slide28
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
b
arbarella
(
marineboy
[1], ironman->
isis
);
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
These arguments are passed into
barbarella
, and received on the other side as….
barbarella
() stackSlide29
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
b
arbarella
(superhero& storm, superhero *&
catwoman
)
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
These arguments are passed into
barbarella
, and received on the other side as….
References!
barbarella
() stack
storm
catwoman
Careful here,
catwoman
is a REFERENCE to a POINTER, to a superheroSlide30
w
onderwoman
(
int
)
i
sis
(superhero *)
superman (
int
*[])
s
torm.wonderwoman
= 465;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwomanSlide31
w
onderwoman
(
int
)
465
i
sis
(superhero *)
superman (
int
*[])
s
torm.wonderwoman
= 465;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwomanSlide32
w
onderwoman
(
int
)
465
i
sis
(superhero *)
superman (
int
*[])
c
atwoman
->
isis
= &storm;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwomanSlide33
w
onderwoman
(
int
)
465
i
sis
(superhero *)
superman (
int
*[])
c
atwoman
->
isis
= &storm;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwoman
No change!
catwoman
->
isis
is the same as
catwoman
, which is already pointing at the address of the object that storm references.Slide34
w
onderwoman
(
int
)
465
i
sis
(superhero *)
superman (
int
*[])
c
atwoman
->
wonderwoman
= 830;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwomanSlide35
w
onderwoman
(
int
)
830
i
sis
(superhero *)
superman (
int
*[])
c
atwoman
->
wonderwoman
= 830;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwomanSlide36
w
onderwoman
(
int
)
830
i
sis
(superhero *)
superman (
int
*[])
c
atwoman
->isis[0].superman[1] = &(
storm.isis
->
wonderwoman
);
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwomanSlide37
w
onderwoman
(
int
)
830
i
sis
(superhero *)
superman (
int
*[])
c
atwoman
->isis[0].superman[1] = &(
storm.isis
->
wonderwoman
);
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwoman
Remember:
isis
[0] is the same as *
isis
.
Fun fact:
isis
[-1] is the same as
marineboy
[0]!
That’s
b
ecause
isis
[-1] is the same as
*(
isis
+ (-1 *
sizeOfSuperhero
)), or “dereference the address 1 superhero behind
isis
”Slide38
w
onderwoman
(
int
)
830
i
sis
(superhero *)
superman (
int
*[])
c
atwoman
= &storm;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwomanSlide39
w
onderwoman
(
int
)
830
i
sis
(superhero *)
superman (
int
*[])
c
atwoman
= &storm;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwoman
Another no change operation!Slide40
w
onderwoman
(
int
)
830
i
sis
(superhero *)
superman (
int
*[])
c
atwoman
->
wonderwoman
= 507;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwomanSlide41
w
onderwoman
(
int
)
507
i
sis
(superhero *)
superman (
int
*[])
c
atwoman
->
wonderwoman
= 507;
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwomanSlide42
w
onderwoman
(
int
)
507
i
sis
(superhero *)
superman (
int
*[])
catwoman
->
isis
= new superhero[2];
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwomanSlide43
w
onderwoman
(
int
)
507
i
sis
(superhero *)
superman (
int
*[])
catwoman
->
isis
= new superhero[2];
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwomanSlide44
w
onderwoman
(
int
)
507
i
sis
(superhero *)
superman (
int
*[])
State before
barbarella
exits:
w
onderwoman
(
int
)
152
i
sis
(superhero *)
superman (
int
*[])
marineboy
ironman
e
lektra
() stack
heap
9189
barbarella
() stack
storm
catwoman