Page language

Senin, 09 April 2012

Pointer


POINTER

1.      Konsep dasar Pointer
Pointer => bsa dibilang sebagai variabel penunjuk, dimana berisi dengan alamat lokasi suatu memori tertentu. Jadi pointer tidak berisi nilai data akan tetapi berisi suatu alamat.
Contoh :
Char X = ‘J’, X tidak bisa dikatakan sebagai variabel penunjuk(pointer), nilai dari X (yaitu J) diletakan pada memori tertentu yg dapat diakses jika diektahui alamat memorinya. Alamat dari nilai X(yaitu J) dapat diketahui dari ungkapan &X(fungsi yang ada pada pointer),
Ketika alamat dari nilai X(yaitu J) disimpan dalam suatu variabel dapat di tuliskan seperti dibawah ini :
            Alamat_X = &X;
Alamat_X adalah variabel pointer, bisa dikatakan dengan pointer ke X. Variabel ini lah yang bisa dikatakan sebagai suatu pointer dimana variabel tersebut menunjuk kelokasi dimana nilai X disimpan.

2.      Operator Pointer
Operator dalam pointer ada 2 : ‘&’ dan ‘*’ , operator ‘&’ digunakan untuk mendapatkan nilai dari operandnya, dimana operator untuk operator ‘*’ adalah variabel pointer, dengan kata lain operator ‘*’ digunakan untuk mendapatkan hasil yang berada dialamat memori yang ditunjukan oleh variabel operator.
            Char *Alamat_X,X;(Mendeklarasikan variabel pointer & X bertipe karakter )
            X=’J’;(Variabel X berisi nilai karakter berupa huruf ‘J’)
            Alamat_X = &X; (Menunjukan alamat letak dari nilai X ( yaitu ‘J’ ))
Contoh :
#include <stdio.h>
main(){
              char *alamat_x,x,y,z;
              x='J';
              alamat_x=&x;
              y=x;
              z=*alamat_x;
              printf("Nilai variabel x : %c\n",x);
              printf("Nilai variabel y : %c\n",y);
              printf("Nilai variabel z : %c\n",z);
}

Nilai variabel z didapatkan dengan mengambil nilai yang berada dalam alamat memory tertentu  yang ditunjukan oleh variabel pointer alamat_x ( z = *alamat_x ) sedangkan variabel pointer alamat_x sudah berisi dengan alamat letak dari nilai variabel ‘x’ ( alamat_x=&x ) dengan ini berarti variabel ‘z’ akan berisi dengan nilai yang sama dengan nilai yang ada pada variabel ‘x’.
Contoh lain :
#include <stdio.h>

main(){
              float Nilai, *alamat = &Nilai;
              Nilai=25.55;
              printf("Nilai %7.2f \n",Nilai);
}

3.      Operasi pointer
a.       Operasi pengerjaan (Assignment) : operasi pointer ini digunakan untuk memindahkan nilai dari suatu variabel pointer ke variabel pointer yang lain.
Contoh :
#include <stdio.h>
main(){
float *alamat_x,*alamat_z,y,hasil1,hasil2;
  y=25.15;
  alamat_x=&y;
  alamat_z=alamat_x;
  hasil1=*alamat_x;
  hasil2=*alamat_z;
  printf("Nilai y :%p\n",alamat_x);
  printf("Nilai z :%p\n",alamat_z);
  printf("hasil dari operasi pengerjaan x :%f\n",hasil1);
  printf("hasil dari operasi pengerjaan z :%f",hasil2);
}

b.      Operasi Aritmatika
Variabel pointer dapat dilakukan penambahan atau pengurangan dengan suatu nilai integer(hanya dapat dikerjakan dengan nilai integer saja). Operasi pertambahan pointer dengan suatu nilai integer merupakan suatu peningkatan nilai pointer yang menunjukan lokasi nilai data berikutnya (bukan byte berikutnya) dimemori.
Misal :
Nilai ‘x’ menunjukan alamat 1000, maka operasi pertambahan dapat ditulis ‘x+1’ yang dapat diartikan dengan alamat 1000+sizeof(x).  Jika ‘x’ merupakan variabel pointer bertipe ‘int’ maka operasi ‘x+1’ akan menunjukan alamat 1002 karena tipe integer memiliki lebar data sebesar 2 byte. Jika ‘x’ bertipe float maka alamat menjadi 1004 karena tipe data float memiliki lebar data 4 byte, untuk tipe data char memiliki lebar data 1 byte.
Contoh :
#include <stdio.h>

main(){
  int Nilai1,Nilai2,Nilai3,*Penunjuk;
  Nilai1=123;
  Nilai2=345;
  Nilai3=678;
  Penunjuk=&Nilai1;
  printf("Nilai %d dialamat memory %p \n",*Penunjuk,Penunjuk);
  printf("Nilai %d dialamat memory %p \n",Nilai2,Penunjuk+1);
  printf("Nilai %d dialamat memory %p \n",Nilai3,Penunjuk+2);

}

c.       Operasi Logika
Dua buah variabel pointer dapat dibandingkan jika keduanya mempunyai tipe data yang sama atau keduanya bernilai null.
Contoh :
#include <stdio.h>
main(){
   int Nilai1=100,Nilai2=100,*PN1,*PN2,*PN3;
   PN1=&Nilai1;
   PN2=&Nilai2;
   PN3=PN1;
   printf("Memori PN1 : %p\n",PN1);
   printf("Memori PN2 : %p\n",PN2);
   printf("Memori PN3 : %p\n",PN3);
   if(PN1<PN2){
          printf("PN1 menunjuk ke memori lebih rendah dari PN2\n");
   }
   if(PN1==PN2){
          printf("PN1 menunjuk ke memori sama dengan dari PN2\n");
   }
   if(PN1>PN2){
          printf("PN1 menunjuk ke memori lebih tinggi dari PN2\n");
   }
   if(PN1<PN3){
          printf("PN1 menunjuk ke memori lebih rendah dari PN3\n");
   }
   if(PN1==PN3){
          printf("PN1 menunjuk ke memori sama dengan dari PN3\n");
   }
   if(PN1>PN3){
          printf("PN1 menunjuk ke memori lebih tinggi dari PN3\n");
   }
}

d.      Operasi Pointer untuk Array
Operasi pointer dapat digunakan untuk mengakses data yang ada dalam suatu Array.
Contoh :
#include<stdio.h>
main(){
   int *P_Awal,*P_Akhir;
   int X[5]={25,15,55,5,75};
   P_Awal=&X[0];
   P_Akhir=&X[4];
   printf("Alamat dari nilai elemen x[0] : %p\n",P_Awal);   //cetak alamat memory
   printf("Alamat dari nilai elemen x[0] : %d\n",*(X+0));   //cetak nilai array
   printf("Alamat dari nilai elemen x[4] : %p\n",P_Akhir);
   printf("Alamat dari nilai elemen x[4] : %d\n",*(X+4));
}

e.       Array of Pointer
Suatu Pointer dapat digunakan sebagai pengganti suatu array, terdapat perbedaan antara array dengan pointer yang mewakilinya, pada array compiler akan menyiapkan tempat memori yang dibutuhkan oleh semua elemen array ketika array tersebut dideklarasikan. Misalnya deklarasai ‘ int x[4];’ akan menyebabkan 4 buah tempat untuk nilai-nilai integer atau sebanyak 8 byte memory yang akan disiapkan untuk array tersebut.
Sedangkan pada pointer compiler tidak akan secara otomatis menyiapkan tempat untuk nilai-nilainya, sehingga digunakan cara alokasi dinamik (dynamic allocation.)
Alokasi dinamik dapat dilakukan dengan menggunakan fungsi standart ‘malloc()’ dengan prototypenya berada di library ‘stdlib.h’ misalnya untuk mengalokasikan memori sebanyak 8 byte secara dinamik ke pointer X dapat dilakukan : ‘ x = malloc(8); / x = malloc(4*sizeof(int);)’ operator sizeof digunakan untuk mengalokasikan 8 byte memori yang berupa 4 buat nilai integer. Untuk menghapus alokasi dinamik  dapat dilakukan dengan fungsi ‘free()’ .
Contoh :
#include<stdio.h>
#include<stdlib.h>


void main(){
      int *pGenap = '\0';

      pGenap=(int*) malloc (10 *sizeof(int));

      int i = 0;
      for(int j=0;j<20;j+=2){
             *(pGenap+i)=j;
             i++;
      }

      for(i=0;i<10;i++){
             printf("%d\t",*(pGenap+i));
      }
      free(pGenap);

}

f.        
4.       

0 komentar:

Posting Komentar

language

EnglishFrenchGermanSpainItalianDutchRussianPortugueseJapaneseKoreanArabicChinese Simplified