/
The superhero The superhero

The superhero - PowerPoint Presentation

alida-meadow
alida-meadow . @alida-meadow
Follow
447 views
Uploaded On 2016-07-23

The superhero - PPT Presentation

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

superman int onderwoman superhero int superman superhero onderwoman sis marineboy ironman stack 152 heap 9189 isis storm catwoman barbarella

Share:

Link:

Embed:

Download Presentation from below link

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.


Presentation Transcript

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