CS 161 Intro to CS I Pointers 1 Introduc2on - - PowerPoint PPT Presentation

cs 161 intro to cs i
SMART_READER_LITE
LIVE PREVIEW

CS 161 Intro to CS I Pointers 1 Introduc2on - - PowerPoint PPT Presentation

CS 161 Intro to CS I Pointers 1 Introduc2on Defini2on Pointer is the address of a variable in memory 3AE17 3AE37 3AE57


slide-1
SLIDE 1

CS ¡161 ¡ Intro ¡to ¡CS ¡I ¡

1 ¡

Pointers ¡

slide-2
SLIDE 2

Introduc2on ¡ ¡

  • Defini2on ¡ ¡
  • Pointer ¡is ¡the ¡address ¡of ¡a ¡variable ¡in ¡memory ¡ ¡
  • 3AE57 ¡
  • You ¡may ¡remember ¡them ¡from ¡call-­‑by-­‑reference ¡

parameters ¡

3AE17 ¡ 3AE37 ¡ 3AE57 ¡ 3AE77 ¡ 3AE97 ¡ aPointer ¡

slide-3
SLIDE 3

Pointer ¡Variables ¡

  • Pointer ¡is ¡a ¡type ¡
  • Pointer ¡variable ¡holds ¡a ¡pointer, ¡i.e. ¡an ¡address ¡
  • NOT ¡int ¡or ¡double ¡or ¡other ¡numeric ¡data ¡type! ¡

¡ ¡

  • Pointer ¡variable ¡declara2on ¡ ¡
  • double ¡*ptr; ¡
  • Pointer ¡to ¡double ¡ ¡
  • Holds ¡pointer ¡to ¡only ¡type ¡double ¡
  • Why? ¡ ¡ ¡
slide-4
SLIDE 4

Pointer ¡“Jargon” ¡

  • Pointers ¡hold ¡and ¡address. ¡ ¡But… ¡ ¡
  • We ¡don’t ¡men2on ¡the ¡address ¡
  • A ¡pointer ¡‘points’ ¡to ¡a ¡variable ¡of ¡the ¡correct ¡data ¡type ¡ ¡
  • More ¡on ¡these ¡shortly ¡
  • Dereferencing ¡a ¡pointer ¡is ¡ge[ng ¡the ¡value ¡stored ¡in ¡the ¡loca2on ¡
  • Address ¡of ¡operator ¡allows ¡us ¡to ¡manipulate ¡the ¡address ¡ ¡
slide-5
SLIDE 5

Poin2ng ¡

int ¡*ptr1, ¡*ptr2, ¡var1, ¡var2; ¡ ¡ ¡ ptr1 ¡= ¡&var1; ¡ ¡ & ¡is ¡the ¡address ¡of ¡operator ¡ ¡ Statement ¡sets ¡ptr1 ¡to ¡point ¡to ¡var1 ¡ ¡ Transla2on ¡ ¡ ptr1 ¡points ¡to ¡var1 ¡also ¡means ¡ ¡ ¡ ptr1 ¡equals ¡address ¡of ¡var1 ¡or ¡ ¡ ptr1 ¡holds ¡the ¡address ¡of ¡var1 ¡

slide-6
SLIDE 6

Poin2ng ¡

Consider-­‑ ¡ ¡ int ¡*ptr1, ¡*ptr2, ¡var1, ¡var2; ¡ ¡ ptr1 ¡= ¡& ¡var1; ¡ ¡ ¡ Two ¡ways ¡to ¡get ¡the ¡value ¡of ¡var1 ¡ ¡ var2 ¡= ¡var1; ¡ ¡ var2 ¡= ¡*ptr1; ¡ ¡ ¡ * ¡is ¡the ¡dereferencing ¡operator ¡ ¡ Retrieves ¡the ¡value ¡ptr ¡points ¡to ¡(i.e. ¡that ¡storage ¡loca2on) ¡ ¡

slide-7
SLIDE 7

Example ¡ ¡

Consider-­‑ ¡

var1 ¡= ¡0; ¡ ptr1 ¡= ¡&var1; ¡ *ptr1 ¡= ¡42; ¡ cout ¡<< ¡var1 ¡<< ¡endl; ¡ cout ¡<< ¡*ptr1 ¡<< ¡endl; ¡

Produces ¡output: ¡ 42 ¡ 42 ¡ ptr1 ¡and ¡var1 ¡refer ¡to ¡same ¡variable ¡

¡ ¡

slide-8
SLIDE 8

Assigning ¡Pointers ¡

Pointer ¡values ¡can ¡be ¡assigned ¡to ¡other ¡pointers ¡ int ¡*p1, ¡*p2; ¡ ¡ p1 ¡= ¡p2; ¡ ¡ Assigns ¡pointer ¡2 ¡to ¡pointer ¡1 ¡ ¡ P1 ¡now ¡points ¡to ¡where ¡p2 ¡points ¡to ¡ ¡ ¡ Consider ¡this-­‑ ¡ ¡*p1 ¡= ¡*p2; ¡ ¡ ¡ What’s ¡different? ¡ ¡ ¡ ¡ Value ¡in ¡p2 ¡is ¡placed ¡in ¡p1 ¡ ¡ ¡ The ¡pointers ¡(i.e. ¡the ¡addresses) ¡do ¡not ¡change ¡ ¡ ¡ ¡

slide-9
SLIDE 9

Sta2c ¡

Memory ¡allocated ¡at ¡compile ¡2me ¡ ¡ Variable ¡= ¡Value ¡Seman2cs ¡ Variable ¡name ¡associated ¡to ¡memory ¡ loca2on ¡ Value ¡stored ¡ ¡ Copy ¡of ¡value ¡is ¡used ¡ ¡ ¡ ¡ int ¡i, ¡j ¡= ¡2; ¡ i ¡= ¡j; ¡ ¡

¡ i ¡ <addr1> ¡ &i ¡ 7 ¡ i ¡ <addr2> ¡ &j ¡ 7 ¡

slide-10
SLIDE 10

Dynamic ¡

Memory ¡allocated ¡at ¡run2me ¡ Memory ¡comes ¡from ¡the ¡heap ¡ ¡ Pointer ¡= ¡Reference ¡Seman2cs ¡ Allocate ¡memory ¡ Address ¡stored ¡in ¡pointer ¡variable ¡ ¡ int ¡*i ¡= ¡NULL; ¡ i ¡= ¡new ¡int; ¡ ¡ *I ¡= ¡2; ¡ ¡ ¡

i ¡ <addr1> ¡ &i ¡ <addr2> ¡ *i ¡ <addr2> ¡ 2 ¡

slide-11
SLIDE 11

Memory ¡Leak ¡

...
 int main () { int *i=NULL; //created in main function while(1) { i = new int; } }

¡

Memory ¡allocated ¡in ¡the ¡heap ¡and ¡not ¡released ¡

slide-12
SLIDE 12

Plugging ¡the ¡Leak ¡

...
 int main () { int *i=NULL; //created in main function while(1) { i = new int; delete i; frees or releases the memory } }

¡

Memory ¡allocated ¡in ¡the ¡heap ¡is ¡now ¡available ¡to ¡use ¡elsewhere ¡ in ¡your ¡program ¡ ¡ ¡

slide-13
SLIDE 13

Arrays ¡ ¡

  • Pointer ¡is ¡the ¡address ¡of ¡the ¡first ¡array ¡element ¡

¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Address ¡

Array1[2] ¡= ¡3AE17 ¡+ ¡2* ¡2016 ¡= ¡3AE57 ¡(address ¡of ¡element ¡3) ¡ ¡

  • You ¡may ¡also ¡remember ¡them ¡from ¡call-­‑by-­‑reference ¡

parameters: ¡ ¡int ¡foo(int ¡&x); ¡ ¡ ¡

3AE17 ¡ 3AE37 ¡ 3AE57 ¡ 3AE77 ¡ 3AE97 ¡ array1 ¡ 3AE17 ¡

slide-14
SLIDE 14

Sugges2on ¡

Is ¡this ¡confusing? ¡ ¡YES ¡ ¡ ¡ ¡ It ¡will ¡never ¡make ¡sense ¡unless ¡you ¡write ¡ programs ¡and ¡use ¡pointers! ¡ ¡ ¡ ¡ It ¡will ¡never ¡make ¡sense ¡unless ¡you ¡write ¡ programs ¡and ¡use ¡pointers! ¡ ¡ ¡ ¡ ¡ ¡ ¡

¡