Your SlideShare is downloading. ×
  • Like
FP 201 - Unit 6
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
477
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
42
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. FUNDAMENTALS OFC++ PROGRAMMING6.0 POINTER (PENUDING)
  • 2. 6.1 Understand the concept of pointer
  • 3. Learning Outcome At the end of the class, student should be able to:  Define pointer and explain its function  Declare pointer  Explain new and delete operators
  • 4. What is pointer? Pointer is the memory address of a variable. Pointer is a variables that are used to store the addresses of other variables.
  • 5. What is pointer? Memory Blocks 0x8f8dfff12 0x8f8dfff13 0x8f8dfff14 Address of Memory Blocks
  • 6. Declaring Pointer Syntax: data_type *pointer_name;Example double *p;
  • 7. The * and & operators * operator  Reference/dereference operator  Produce the variable to which it point  Refer to “value pointed by”  Pointers are said to "point to" Example of usage:  double *p; // declare pointer to double variable  void func(int *p) // declare p to be a pointer value parameter
  • 8. The * and & operators & operator  Address-of operator  Produce address of variable  Example: double *p, v; p = &v; // p point to address of v
  • 9. Pointer Operator int *my_pointer; int my_variable; my_pointer = &my_variable; my_pointer = &my_variable Pointer Memory location variables Address operator
  • 10. How it will look like?#include<iostream>using namespace std;void main(){ int i; int *j; j = &i; //pointer to i i=4; cout<<"i = " <<i<<endl; cout<<"j = " <<j<<endl;}
  • 11. j = &i; //pointer to address i i=4;i 4j 0012FF60
  • 12. What is the output??? int i; int *j; j = &i; //pointer to i i=4; cout<<"i = " <<i<<endl; cout<<"j = " <<*j<<endl;
  • 13. j = &i; //pointer to address ii=4; i 4 j 0012FF60 cout<<"j = " <<*j j 4
  • 14. How it will look like?#include<iostream>  Output:using namespace std;void main() v1=42{ int *p1, v1; p1=42 v1 = 0;  Why? p1 = &v1; //pointer to v1 - As long as p1 *p1 = 42; //value pointed by p1 = 42 contains address to v1, then both refer cout<<"v1="<<v1<<endl; to the same cout<<"p1="<<*p1<<endl; variable}
  • 15. v1 = 0;v1 0 p1 = &v1; &vp1 1 *p1 = 42; //value pointed by p1 = 42 p1 42 v1 42
  • 16. See difference? p1 = p2;p1 8 p1 8p2 9 p2 9 BEFORE AFTER *p1 = *p2;p1 8 p1 9p2 9 p2 9
  • 17. Pointer Arithmetic Pointer can only used two arithmetic operation addition and subtraction. int a, int *p; W hat happen is: p=&a;  pointer move over bytes p=p+2;  not adding 2 to value of a  it point to the last 2 x int of the integer aPosition of pointer p Position of pointer p after before operation p+2 operation
  • 18. Pointer Arithmetic Example: its equivalent to:#include<iostream>using namespace std; #include<iostream>void main() using namespace std;{ void main() int arraysize=4; { int d []={1,2,3,4}; int arraysize=4; for (int i = 0; i < arraysize; + int d []={1,2,3,4}; +i) for (int i = 0; i < arraysize; ++i) cout << *(d + i) << " "; cout << d[i] << " ";} }
  • 19. Pointer & character string Use standard function strcmp() uses two pointers to compare two strings: strcmp (char *s1, char *s2) { while (*s1) if (*s1 - *s2) return *s1 - *s2; //if the string are not equal else { s1++; s2++; } return 0; }
  • 20. new and delete operator new operator creates new dynamic variable of specific type It also return a pointer that point to this new variable Eg: int *n; n = new int(17); // initialize *n to 17
  • 21. How it will look like?int *p1, *p2; p1 ? p2 ?p1 = new int;*p1 = 42; p1 p2 ? p1 42 p2 ?
  • 22. p2 = p1; p2 = new int; p1 ? p1 42 p2 p2 53*p2 = 53; *p1 = 88; p1 p1 88 53 p2 p2 53
  • 23.  delete operator eliminates dynamic variable It also returns memory that the dynamic variable occupied in freestore. Eg: delete p; // p will be undefined Good practice:  Everytime you delete a pointer variable put it to NULL to ensure it does not become dangling pointer!
  • 24. #include<iostream>using namespace std;void main(){int *p1;p1 = new int;*p1 = 10; cout << "*p1 t = "<< *p1 << endl;delete p1;cout << "*p1 t = "<< *p1 << endl;}
  • 25. In Class Exercise 1 What is the output? p1 = p2;int *p1, *p2; cout << *p1 << "t"<< *p2 << endl;p1 = new int; *p1 = 30;p2 = new int; cout << *p1 << "t"<< *p2 << endl; *p1 = *p2;*p1 = 10; cout << *p1 << "t"<< *p2 << endl;*p2 = 20;cout << *p1 << "t"<< *p2 << endl;
  • 26. How it will look like?int *p1, *p2; p1 ? p2 ?p1 = new int;p2 = new int; p1 p2*p1 = 10; *p2 = 20; p1 10 p2 20
  • 27. p1 = p2; p1 10 p2 20*p1 = 30; p1 10 p2 30*p1 = *p2; p1 30 p2 30
  • 28. In Class Exercise 2 What is the different between the following variable? int *intPtr1, intPtr2; Write a declaration for a pointer variable named my_new_ptr that points to dynamic variable of type double.
  • 29. 6.2 Illustrate the relationship between pointer and array
  • 30. Learning Outcome At the end of the class, student should be able to:  Identify relationship between pointer and array  Write program using pointer and array
  • 31. Pointer & Array Array is a collection of similar type of data Variable in an array can store memory address instead of variable value Dynamic array is an array whose size is determined during run-time. It is created using new operator. Eg: double *new_array; //point to 1st index in the array new_array = new double[10] //to allocate
  • 32. Pointer in Array: Example 1#include<iostream>using namespace std;void main(){ int d []={1,2,3,4}; int *p1; p1=d; for (int i = 0; i < 4; ++i) cout << *(p1 + i) << " ";}
  • 33. Pointer in Array: Example 2#include <iostream>using namespace std;void main(){ int array_size; cout << “Enter array size: “; cin >> array_size; int* my_dyn_array = new int [array_size]; cout << “Enter ” << array_size << “ number ” << endl; for (int i = 0; i < array_size; ++i) cin >> my_dyn_array[i];}
  • 34. Pointer and Array An array declared without specifying its size can be assume as a pointer to the address of the first element in the array. Eg: int a[] = {2, 4, 6, 8, 10}; To iterate to the next element, add operation is used.
  • 35. Pointer and Array: Example 1#include <iostream>using namespace std;int main(){ char susun[] = "Selamat belajar"; char * pt_str; pt_str = susun; / point to first element / cout << "Turutan sblm perubahan " << susun; cout << " nSebelum perubahan, kandungan susun[5] : " <<susun[5]; * (pt_str+5) = C; /change the 6th element / cout << " nSelepas perubahan, kandungan susun[5] : " <<susun[5]; cout << " nTurutan slps perubahan" << susun; return 0;}
  • 36. Pointer and Array: Example 2#include <iostream>using namespace std;int main(){ int senarai[] = {1,2,3,4,5}; int * point; point=senarai; / point to first element / cout << " nTurutan sblm perubahan " << senarai[0] << " " << senarai[1]; cout << " " << senarai[2] << " " << senarai[3] << " " << senarai[4]; cout << " nSebelum perubahan, kandungan senarai[2] : " <<senarai[2]; * (point+2)= 7; / change the 3rd element / cout << " nSelepas perubahan, kandungan senarai[2] : " <<senarai[2]; cout << " nTurutan slps perubahan " << senarai[0] << " " << senarai[1]; cout << " " << senarai[2] << " " << senarai[3] << " " << senarai[4]; cout << endl; return 0;}
  • 37. In Class Exercise 3 Write a declaration for pointer variable named char_ptr that will be used to point to a dynamic array of type char. What is the output for the following code? int c[3] = {2, 3, 4}; int arraysize = 3, * p; p = c; for (int i = 0; i < arraysize; ++i) cout << c[i] << “ “; for (i = 0; i < arraysize; ++i) cout << * (p + i) << “ “;
  • 38.  Declaration char * char_ptr; //point to 1st index in the array char_ptr = new char[6]; What is the output for the following code?
  • 39. 6.3 Illustrate the relationship between pointer and function
  • 40. Learning Outcome At the end of the class, student should be able to:  Identify relationship between pointer and function  Use pointer as function argument  Write program using pointer and function
  • 41. Pointer & Functions 2 types of function calls:  Call by value  Call by reference Pointer can be used as parameters in both function
  • 42. Pointers & Function#include <iostream>using namespace std; void Change (int *a, int *b, int *c) {void Change (int *, int *, int *); *a = 100; *b = 200; *c = 300;void main() } { int x=50, y=60, z=70; cout << "nx = " << x << "ny = " << y received address << "nz = " << z << "nn"; Change (&x, &y, &z); cout << "nx = " << x << "ny = " << y << "nz = " << z << "nn"; change value in } variable that is point by a,b,c
  • 43. How it will look like?Change(&x, &y, &z);void Change(int *a, int *b, int *c) { &x 50 *a = 100; x (100) 1001 *a *b = 200; 1001 *a &y *c = 300; 60 y (200) 1002 } 1002 *b *b 70 &z z (300) 1003 *c 1003 *c
  • 44. Pointers & Function#include <iostream> void Change (int &a, int &b, int &c)using namespace std; { a = 100; b = 200;void Change (int &, int &, int &); c = 300; }void main() received address { int x=50, y=60, z=70; cout << "nx = " << x << "ny = " << y << "nz = " << z << "nn"; change value refered by Change (x, y, z); a,b,c cout << "nx = " << x << "ny = " << y << "nz = " << z << "nn"; }
  • 45. Summary Pointer is a memory address Pointer variable provides way to indirectly name variable by naming the address of variable in memory new and delete operator can be use to allocate and free the memory after pointer is used Dynamic array is array whose sized is determined during runtime Function can have pointer variable as its parameter variables.