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.       

Fungsi


FUNGSI
A.    Definisi Fungsi dalam Bahasa C
Bagian dari program yang dimaksudkan untuk mengerjakan suatu tugas tertentu dan letaknya dipisahkan dari bagian program yang menggunakan.  Fungsi biasa disebut dengan Method, subroutine ataupun prosedur yang dapat dipanggil oleh fungsi lain.
Fungsi secara umum terdiri dari 2 buah komponen utama, yaitu definisi fungsi dan tubuh fungsi. Definisi fungsi berisi tipe dari fungsi, nama dan argument-argumentnya sedangkan tubuh dari fungsi berisi dengan statement-statement yang akan melakukan tugas yang diberikan kepada fungsi yang bersangkutan.
Contoh :
Tipe nama_fungsi(argument1, argument2){ //Definisi Fungsi
....                                 //Tubuh Fungsi
}

Penerapan :
int fungsi_Kalkulus(int a, int b){ //Definisi Fungsi
      if(a<b){
          printf(“nilai b lebih besar dari a”); //Tubuh Fungsi
}                                    
}

Tipe data void dapat dituliskan sebagai pengganti argumen untuk fungsi yang tidak menggunakan argumen. Argument yang ada di definisi fungsi ini disebut dengan argumen formal/formal argument.

B.     Manfaat Fungsi
a)      Menjadikan program C mempunyai struktur yang jelas. Fungsi main dapat dibuat lebih ringkas dan mudah dibaca karena beberapa instruksi menjadi fungsi-fungsi terpisah.
b)      Fungsi menghindarkan operasi/instruksi yang sama ditulis berulang kali. Hal ini merupakan fungsi dari fungsi yang dapat dipanggil oleh fungsi/method yang lain.

C.     Variabel Fungsi
Terdapat 3 variabel fungsi dalam bahasa C yaitu
a)      Variabel Lokal
Variabel yang didefinisikan dalam fungsi dan tidak dapat digunakan oleh fungsi yang lain
Contoh 1:
#include <stdio.h>
void printA();
void main(){
      int a = 5; //variabel didalam fungsi main()
      printf("nilai a pada fungsi main adalah %d \n", a);
      printA();
}
void printA(){
      int a = 9;
      printf("nilai a pada fungsi printA adalah %d \n", a);
}

Contoh 2 :
#include<stdio.h>
float Tambah(float A,float B);
main(){
      float C,Hasil;   // variabel lokal
      Hasil=Tambah(2,3);
      printf("tampilan pada fungsi main\n");
      printf("%f\n",C);
}
float Tambah(float A,float B){
      float C;     // variabel lokal
      C=A+B;
      printf("tampilan pada fungsi tambah\n");
      printf("%f\n",C);
      return(C);
}

b)      Variabel Global
Variabel yang didefinisikan diluar fungsi dan dapat digunakan oleh fungsi-fungsi yang memanggilnya.
Contoh 1 :
#include <stdio.h>
void printA();
int a; // variabel diluar fungsi
void main(){
      a = 5;
      printf("nilai a pada fungsi main adalah %d \n", a);
      printA();
}
void printA(){
      printf("nilai a pada fungsi printA adalah %d \n", a);
}
                        Contoh 2 :
#include<stdio.h>
float Tambah(float A,float B);
float C,Hasil;   //variabel Global
main(){
      Hasil=Tambah(2,3);
      printf("tampilan pada fungsi main\n");
      printf("%f\n",C);
}
float Tambah(float A,float B){
      C=A+B;
      printf("tampilan pada fungsi tambah\n");
      printf("%f\n",C);
      return(C);
}



c)      Variabel Statis
Deklarasi sama dengan variabel lokal akan tetapi dalam variabel statis variabelnya akan tetap ada dan nilainya tetap dipertahankan walaupun proses telah keluar dari bloknya, dengan kata lain suatu proses yang telah keluar dari suatu blok (fungsi) yang mendeklarasikan dan kemudian masuk kembali ke blok (fungsi) tersebut, maka nilai terakhir dari variabel statik masih tetap digunakan.
Contoh :
#include <stdio.h>
int incrementA();
void main(){
      int a; //variabel didalam fungsi main()
      a = incrementA();
      printf("nilai a pada fungsi main adalah %d \n", a);
      a = incrementA();
      printf("nilai a pada fungsi main adalah %d \n", a);
}
int incrementA(){
      static int a = 0;
      a++;
      return a;
}

D.    Pengiriman Parameter
Pengiriman parameter ke suatu fungsi dapat dilakukan dengan dua cara yaitu penerimaan secara nilai (by value) atau secara acuan (by reference).
·         Pengiriman secara nilai(by value)
Parameter ini yang dikirimkan ke fungsi adalah nilai dari datanya, bukan alamat memori letak dari datanya,
Contoh :
#include <stdio.h>
void tes(int x);
void main(){
  int a=4,b=6,c=7;
  tes(a+b-c);
}
void tes(int x){
  printf("%d",x);
}
·         Pengiriman secara acuan(by reference)
Parameter ini yang dikirimkan ke fungsi adalah alamat letak dari nilai datanya bukan dari nilai datanya.
Contoh :
#include <stdio.h>
void tes(int *x);
void main(){
  int a=4;
  tes(&a);
  printf("%d",  a);
}
void tes(int *x){
  *x=7;
}

E.     Array Sebagai Parameter
Argumen dari sebuah fungsi dapat berupa array, Array sebagai argumen fungsi dapat berupa array satu dimensi maupun multidimensi. Untuk array 1 dimensi, ukuran array tidak perlu dituliskan, sedangkan untuk array 2 dimensi, ukuran kedua harus dituliskan.
·         Pengiriman parameter berupa array dimensi satu
Merupakan pengiriman parameter secara acuan/by reference, karena yang dikirimkan adalah alamat dari elemen pertama array, bukan seluruh nilai-nilai elemennya. Alamat elemen pertama dari array dapat ditunjukan oleh nama arraynya yang tidak ditulis dengan indexnya. Bentuk tersebut akan tampak sebagai argumen di parameter nyata untuk bagian yang memanggil fungsi.
Contoh :
#include<stdio.h>
void Cetak_Mundur(char S[]);
void main(){
      char S[]="Ini Nilai String";
      Cetak_Mundur(S);
}
void Cetak_Mundur(char S[]){
      int I,N;
      for(N=0;S[N];N++);
      for(I=N-1;I>=0;I--){
             printf("%c",S[I]);
      }
      printf("\n");
}

·         Pengiriman parameter berupa array dimensi dua
Pengiriman parameter berupa array dimensi dua, untuk parameter nyatanya dapat dilakukan dengan cara yang sama dengan pengiriman parameter berupa larik dimensi satu yaitu dengan mengirimkan alamat elemen pertama dari array, perbedaanya adalah terletak diparameter formalnya, dimana jumlah dari maksimum kolom yang telah dideklarasikan dibagian program yang memanggil fungsi harus ikut disebutkan.
Contoh :
#include<stdio.h>
void printTable(int array[][5],int xlen,int ylen);
void main(){
      int arr[][5]={1,2,3,4,5,6,7,8,9,10};
      printTable(arr,2,5);
}
void printTable(int array[][5],int xlen,int ylen){
      int i,j;
      for(i=0;i<xlen;i++){
             for(j=0;j<ylen;j++)
                    printf("%d\t",array[i][j]);
                    printf("\n");
      }
}

F.       



language

EnglishFrenchGermanSpainItalianDutchRussianPortugueseJapaneseKoreanArabicChinese Simplified