Jumat, 18 November 2011

C++ Lanjutan 17

6.2.1 Pointer - Array
         Dalam 6.1 kita telah membahas array, sekarang kita akan melihat bagaimana data disimpan di memori dalam sebuah array.

Contoh :
#include <iostream.h>
void main()
{
   int n;
   int array[4] = {10,20,30,40};
   for(n=0;n<4;n++)
   {
      cout<<”Array[“<<n<<”] = “<<array[n]<<endl;
      cout<<”\tMenggunakan pointer = “<<*&array[n]<<endl;
      cout<<”\tDisimpan dalam “<<&array[n]<<endl;
    }
}

Keluarannya :
Array[0] = 10
           Menggunakan pointer = 10
   Disimpan dalam 0xdb72408
Array[1] = 20
Menggunakan pointer = 20
   Disimpan dalam 0xdb7240a
Array[2] = 30
Menggunakan pointer = 30
   Disimpan dalam 0xdb7240c
Array[3] = 40
Menggunakan pointer = 40
   Disimpan dalam 0xdb7240e
          


Penjelasan :
Seperti yang anda lihat, setiap array disimpan dalam 2 byte memori karena kita menggunakan tipe data integer. Perhatikan pula penggunaan pointer dalam pengaksesan nilai setiap elemen array dan pengaksesan alamat setiap array.

·         Alamat setiap elemen array dapat diperoleh dengan cara

&array[n]             atau      array+n

·         Isi dari setiap elemen array dapat diperoleh dengan cara

array[n]       atau      *(array+n)    


      Dibawah ini adalah contoh pengaksesan memori dan isi memori dengan menggunakan cara kedua

Contoh :
#include <iostream.h>
void main()
{
   int n;
   int array[4] = {10,20,30,40};
   for(n=0;n<4;n++)
   {
      cout<<”Array[“<<n<<”] = “<<array[n]<<endl;
      cout<<”\tMenggunakan pointer = “<<*(array+n)<<endl;
      cout<<”\tDisimpan dalam “<<array+n<<endl;
    }
}

Keluarannya :
Array[0] = 10
           Menggunakan pointer = 10
   Disimpan dalam 0xdb72408
Array[1] = 20
Menggunakan pointer = 20
   Disimpan dalam 0xdb7240a
Array[2] = 30
Menggunakan pointer = 30
   Disimpan dalam 0xdb7240c
Array[3] = 40
Menggunakan pointer = 40
   Disimpan dalam 0xdb7240e

      Mengapa hasil antara dua contoh diatas sama namun sintaksnya berbeda ? Karena array itu sebenarnya telah menunjuk ke alamat memori setiap elemennya, sehingga untuk mengetahui alamat memori setiap elemen array cukup dengan array + n dengan n bilangan bulat ( integer ).

6.2.2 Pointer - String
         String merupakan bentuk khusus dari array. Oleh karena itu operasi pointer-array tidak jauh berbeda dengan operasi pointer-string
Contoh :
#include <iostream.h>
void main()
{
     char nama[5] = “Andi”;
     cout<<”Nama awal : “<<nama<<endl;
     char *ptr;
     ptr = nama;
     *(ptr+3) = ‘y’;
     cout<<”Nama menjadi : “<<nama<<endl;
}

Keluarannya :
Nama awal : Andi
Nama menjadi : Andy

Jadi :
·         String adalah array (susunan) dari karakter-karakter
·         String dapat diakses dan dimanipulasi lewat pointer
·         Alamat awal dari string dapat diperoleh dari namanya

6.2.3 Pointer Sebagai Argumen String
        Jika pointer dikirim sebagai argument, maka nilai aktualnya dapat dimodifikasi.

Contoh :
#include <iostream.h>
void ubah(char *);
void main()
{
     char *ptr,nama[5] = “Andi”;
     ptr = nama; // ptr sebagai pointer ke variable nama
     cout<<”Nama awal : “<<nama<<endl;
     ubah(ptr);
     cout<<”Nama menjadi : “<<nama<<endl;
 }

void ubah(char *x)
{
  *(x+3) = ‘y’;
}

Keluarannya :
Nama awal : Andi
Nama menjadi : Andy

6.2.4 Alias
         Alias adalah nama lain dari suatu variable. Jika suatu perubaha terjadi pada variable alias maka akan berpengaruh kepada variable asli dan begitu juga sebaliknya.
Contoh :
#include <iostream.h>
void main()
{
   int uang =10000;
   int &duit = uang;
   cout<<”Nilai uang Rp.“<<uang<<endl;
   cout<<”Nilai duit Rp.“<<duit<<endl;
   uang = 9000;
   cout<<”Uang dibelikan es krim Rp.1000, nilainya menjadi Rp.“<<uang<<endl;
   cout<<”Nilai duit juga berubah menjadi Rp.“<<duit<<endl;
}

Keluarannya :
Nilai uang Rp.10000
Nilai duit Rp.10000
Uang dibelikan es krim Rp.1000, nilainya menjadi Rp.9000
Nilai duit juga berubah menjadi Rp.9000

Penjelasan :
Perubahan pada uang  menyebabkan perubahan pada duit karena duit memiliki alamat memori yang sama dengan uang. Jadi jika isi dari alamat memori uang atau duit berubah, maka nilai variable duit atau uang juga akan ikut berubah.

Tidak ada komentar:

Posting Komentar