Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 CSE1301 Computer Programming Lecture 16 Pointers 2.

Similar presentations


Presentation on theme: "1 CSE1301 Computer Programming Lecture 16 Pointers 2."— Presentation transcript:

1 1 CSE1301 Computer Programming Lecture 16 Pointers 2

2 2 Topics Review of pointer basics More on how to dereference a pointer More on function passing by reference More pointer examples

3 3 Recall A pointer points to another variable A pointer contains the address of another variable The * operator is used to declare a pointer –eg int* xPtr; The & operator gives you the address of a variable The * operator dereferences a pointer - gives you the value the pointer points to

4 4 Recall A pointer is declared to point to a specific data type Any data type can have a pointer pointing to it Like any other variable, the type of a pointer is fixed –So a variable that is declared to be a char* will always point to variables of type char

5 5 More on Dereferencing Pointers point to other variables We need to go through the pointer and find out the value of the variable it points to We do this by dereferencing the pointer, using the * operator But what is actually happening when we dereference?

6 6 Algorithm for Dereferencing To dereference a pointer, use *xPtr, which means: 1. Go to xPtr 2. Take the value you find there, and use it as an address 3. Go to that address 4. Return the value you find there

7 7 ’A’ 0x2000 ch: Pointer examples 0x2000 0x2004 chPtr: char ch; chPtr=&ch; char* chPtr=NULL; ch = ‘A’;

8 8 ’A’ 0x2000 ch Pointer examples 0x2001 char ch=‘A’; char init=‘B’; char* cPtr1=NULL; char* cPtr2=NULL; cPtr1=&ch; cPtr2=&init; *cPtr1 is ?? *cPtr2 is ?? cPtr1 is ?? cPtr2 is ?? ’B’ 0x2002 0x2003 init cPtr1 cPtr2 0x2000 0x2001

9 9 ’A’ 0x2000 ch Pointer examples 0x2001 char ch=‘A’; char init=‘B’; char* cPtr1=NULL; char* cPtr2=NULL; cPtr1=&ch; cPtr2=&init; *cPtr1 is ‘A’ *cPtr2 is ?? cPtr1 is ?? cPtr2 is ?? ’B’ 0x2002 0x2003 init cPtr1 cPtr2 0x2000 0x2001

10 10 ’A’ 0x2000 ch Pointer examples 0x2001 char ch=‘A’; char init=‘B’; char* cPtr1=NULL; char* cPtr2=NULL; cPtr1=&ch; cPtr2=&init; *cPtr1 is ‘A’ *cPtr2 is ‘B’ cPtr1 is ?? cPtr2 is ?? ’B’ 0x2002 0x2003 init cPtr1 cPtr2 0x2000 0x2001

11 11 ’A’ 0x2000 ch Pointer examples 0x2001 char ch=‘A’; char init=‘B’; char* cPtr1=NULL; char* cPtr2=NULL; cPtr1=&ch; cPtr2=&init; *cPtr1 is ‘A’ *cPtr2 is ‘B’ cPtr1 is 0x2000 cPtr2 is ?? ’B’ 0x2002 0x2003 init cPtr1 cPtr2 0x2000 0x2001

12 12 ’A’ 0x2000 ch Pointer examples 0x2001 char ch=‘A’; char init=‘B’; char* cPtr1=NULL; char* cPtr2=NULL; cPtr1=&ch; cPtr2=&init; *cPtr1 is ‘A’ *cPtr2 is ‘B’ cPtr1 is 0x2000 cPtr2 is 0x2001 ’B’ 0x2002 0x2003 init cPtr1 cPtr2 0x2000 0x2001

13 13 ’A’ 0x2000 ch Pointer examples 0x2001 char ch=‘A’; char init=‘B’; char* cPtr1=NULL; char* cPtr2=NULL; cPtr1=&ch; cPtr2=&init;... cPtr1=&init; *cPtr1 is ?? ’B’ 0x2002 0x2003 init cPtr1 cPtr2 0x2000 0x2001

14 14 Assigning to pointers Pointers are just normal variables, that happen to have the type “address of ” Pointers can be assigned to the address of any variable (of the right type) The value of a pointer can change, just like the value of any other variable The value of a pointer can be manipulated, just like the value of any other variable

15 15 ’A’ 0x2000 ch Pointer examples 0x2001 char ch=‘A’; char init=‘B’; char* cPtr1=NULL; char* cPtr2=NULL; cPtr1=&ch; cPtr2=&init; *cPtr2=‘.’; ’B’ 0x2002 0x2003 init cPtr1 cPtr2 0x2000 0x2001

16 16 ’A’ 0x2000 ch Pointer examples 0x2001 char ch=‘A’; char init=‘B’; char* cPtr1=NULL; char* cPtr2=NULL; cPtr1=&ch; cPtr2=&init; *cPtr2=‘.’; cPtr2 is ?? ’.’ 0x2002 0x2003 init cPtr1 cPtr2 0x2000 0x2001

17 17 ’A’ 0x2000 ch Pointer examples 0x2001 char ch=‘A’; char init=‘B’; char* cPtr1=NULL; char* cPtr2=NULL; cPtr1=&ch; cPtr2=&init; *cPtr2=‘.’; cPtr2 is 0x2001 (same as before - why would it change?) ’.’ 0x2002 0x2003 init cPtr1 cPtr2 0x2000 0x2001

18 18 Pointers as Parameters Recall that parameters are normally passed as copies f(x) takes a copy of the value of x and passes it to f This is called passing by value When you pass the address of a variable, you tell the function where to find the actual variable, not just a copy of it

19 19 Pointers as Parameters (cont) Passing the address means the function can go and look at the variable, and change its value if it wants to. This is called passing by reference If you pass by reference, you can change the variable If you pass by value, you can only change the copy - this has no effect on the original variable

20 20 Advantages of passing by reference Efficient –because you are not wasting space by making extra copies of variables every time you call a function Another way to return information from a function –How do you return more than one value from a function? Using parameters passed by reference!

21 21 Disadvantages of passing by reference Harder to keep track of where (and how) a variable changes –Now changes could happen anywhere in a program, not just in the function a variable was born in (is local to) Functions are less neat –a function that returns a single value is mathematically neat, one that changes other values is messier to define precisely

22 22 More pointer examples int i=0; int* myPtr=NULL; int x=3; myPtr=&x; *myPtr=34; /* set myPtr to point to x */ /* set x to be 34, using myPtr */ /* set myPtr to point to i */ /* print i using myPtr */ /* print the address of i */ myPtr=&i; printf(“%d”,*myPtr); printf(“%p”,myPtr);

23 23 More pointer examples float x=5.4,y=78.25; float* xPtr=NULL; float* yPtr=NULL; xPtr=&x; yPtr=&y; /* set xPtr to point to x */ /* set yPtr to point to y */ /* put the value of y in x using pointers */ /* put 45.0 in y using yPtr */ *xPtr=*yPtr; *yPtr=45.0


Download ppt "1 CSE1301 Computer Programming Lecture 16 Pointers 2."

Similar presentations


Ads by Google