Senin, 12 Desember 2011

Pointer pada C++

0 komentar

Alamat  (dereference) Operator(&):

Ampersand sign (&) : berarti alamat dari /"address of" dari sebuah data pada memori, hal ini merupakan implementasi dari pointer pada C++.
Contoh:
ted = &andy;
contoh penggunaan:
andy = 25;
fred = andy;
ted = &andy;

Reference operator (*):

"value pointed by" nilai yang ditunjukkan oleh suatu variable pointer. Contohnya:
beth = *ted;
Artinya: "beth sama dengan nilai yang ditunjukkan oleh ted"). beth =25, ted =1776, dan the value pointed by 1776 = 25.
Strukturnya dalam memori:
Contoh lainnya:
beth = ted;   // beth equal to ted ( 1776 )
beth = *ted;  // beth equal to value pointed by ted ( 25 )
 
            Contoh di atas sama dengan;
andy = 25;
ted = &andy;

Sehingga argument-argumen berikut ini adalah benar:
andy == 25
&andy == 1776
ted == 1776
*ted == 25
*ted == andy

 

Deklarasi variable dengan tipe pointer:

type * pointer_name;

Dimana: type adalah tipe dari data yang ditunjuk oleh pointer, bukan tipe data pointer itu sendiri. Contoh :
int * number;
char * character;
float * greatnumber;

// program pointer I
#include <iostream.h>
 
int main ()
{
  int value1 = 5, value2 = 15;
  int * mypointer;
 
  mypointer = &value1;
  *mypointer = 10;
  mypointer = &value2;
  *mypointer = 20;
  cout << "value1==" << value1 << "/ value2==" << value2;
  return 0;
}
value1==10 / value2==20
Prog101.cpp

// program pointer II
#include <iostream.h>
 
int main ()
{
  int value1 = 5, value2 = 15;
  int *p1, *p2;
 
  p1 = &value1;     // p1 = address of value1
  p2 = &value2;     // p2 = address of value2
  *p1 = 10;         // value pointed by p1 = 10
  *p2 = *p1;        // value pointed by p2 = value pointed by p1
  p1 = p2;          // p1 = p2 (value of pointer copied)
  *p1 = 20;         // value pointed by p1 = 20
  
  cout << "value1==" << value1 << "/ value2==" << value2;
  return 0;
}
value1==10 / value2==20
Prog102.cpp

Cara lain untuk mendeklarasikan tipe data pointer:
int *p1, *p2;

 

Pointers and array:

int numbers [20];
int * p;
Maka cara pengisian nilai ke dalam variable p berikut adalah benar:
p = numbers;
Tetapi statemen berikut adalah salah:
numbers = p;

// program pointer III
#include <iostream.h>
 
int main ()
{
  int numbers[5];
  int * p;
  p = numbers;  *p = 10;
  p++;  *p = 20;
  p = &numbers[2];  *p = 30;
  p = numbers + 3;  *p = 40;
  p = numbers;  *(p+4) = 50;
  for (int n=0; n<5; n++)
    cout << numbers[n] << ", ";
  return 0;
}
10, 20, 30, 40, 50,
Prog103.cpp

Cara lain untuk mengisi nilai menggunakan pointer pada array:
a[5] = 0;       // a [offset of 5] = 0
*(a+5) = 0;     // pointed by (a+5) = 0

 

Inisialisasi Pointer :

int number;
int *tommy = &number;

Cara di atas dapat pula ditulis dengan cara sebagai berikut:
int number;
int *tommy;
tommy = &number;

Cara di atas juga tidak sama dengan cara berikut ini:
int number;
int *tommy;
*tommy = &number;

Contoh lain inisialisasi pointer:
char * terry = "hello";
Grafik:
keterangan:
variable terry berisi nilai 1702 dan bukan ‘h’ ataupun “hello”

Untuk merubah karakter ‘o’ pada string “hello” di atas dapat digunakan dua cara berikut ini:
terry[4] = '!';
*(terry+4) = '!';
grafik:

Arithmetic of pointers


Alamat Variabel Pointer pada Memori:
            Contoh:
char *mychar;     // char = 1 byte dilokasi memori 1000
short *myshort;   // short = 2 byte dilokasi memori 2000
long *mylong;     // long = 4 byte dilokasi memori 3000

Maka, bila kita menulis statement berikut ini :
mychar++;
myshort++;
mylong++;

Grafik:

 

Pointer to pointer:

Contoh:
char a;
char * b;
char ** c;
a = 'z';
b = &a;
c = &b;

grafik di bawah ini menunjukan bila alamat variable a, b, dan c di atas berada pada alamat memori 7230, 8092 and 10502:
Maka :
c is a variable of type (char **) with a value of 8092
*c is a variable of type (char*) with a value of 7230
**c is a variable of type (char) with a value of'z'

 

 

void pointer:

void pointer dapat menunjuk ke semua tipe data , dari integer atau float atau string dan karakter.

Salah satu kegunaan dari void pointer adalah untuk mengisi parameter ke suatu fungsi, seperti contoh di bawah ini:

// penambahan integer
#include <iostream.h>
 
void Tambah(void* data, int type)
{
  switch (type)
  {
    case sizeof(char) : (*((char*)data))++; break;
    case sizeof(short): (*((short*)data))++; break;
    case sizeof(long) : (*((long*)data))++; break;
  }
}
 
int main ()
{
  char a = 5;
  short b = 9;
  long c = 12;
  Tambah (&a,sizeof(a));
  Tambah (&b,sizeof(b));
  Tambah (&c,sizeof(c));
  cout << (int) a << ", " << b << ", " << c;
  return 0;
}
6, 10, 13
Prog104.cpp

Leave a Reply