pembahasan pointer dalam bahasa c
DESCRIPTION
Pointer atau PenunjukTRANSCRIPT
PEMBAHASAN POINTER PADA BAHASA C
POINTER
Pointer adalah salah satu fasilitas dari bahasa C yang berfungsi untuk melewatkan string
dari suatu fungsi ke fungsi yang lain dengan memugkinkan untuk memakai memori bebas
selama proses eksekusi program. Fasilitas pointer banyak dilibatkan dalam pemrograman bahasa
C. Hal itu dikarenakan dengan menggunakan pointer dapat menyingkat waktu dan praktis. Kita
tidak perlu berulang – ulang kali menginput string secara berulang – ulang. Selain itu kita juga
dapat mengubah suatu variable yang dilewatkan ke dalam suatu fungsi.
Pointer atau dengan kata lain variabel penunjuk mempunyai arti sebagai suatu variabel
yang berisikan alamat memori dari suatu variabel lain.
Operator dalam Pointer di bedakan menjadi 2 jenis antara lain :
1. Operator &
Operator ini mempunyai sifat unary atau diartikan hanya memerlukan satu operand saja dan
dimana Operator ini menghasilkan alamat dari operandnya.
2. Operator *
Operator ini juga memiliki sifat unary, yang membedakan adalah nilai yang berada pada
sebuah alamat.
Pointer sering dikatakan sebagai variable yang menunjuk obyek lain, dengan kata lain
pointer tersebut berisi alamat variable yang ditunjuk oleh variable tersebut. Sebagai gambaran,
px adalah pointer dan x adalah variable yang di tunjuk oleh px. Kalau x berisi nilai 17 maka px
akan berisi nilai yang sama dengan x yaitu 17. hak itu dikarenakan px telah menunjuk isi dara
variable x sebagai isi dari px itu sendiri. Adapun bentuk deklarasi pointer adalah sebagai
berikut :
Dengan tipe dapat kita isi berupa sebarang tipe.
Tipe *nama_variabel;
Untuk mendeklarasikan pointer kosong adalah dengan perintah berikut :
Operasi – operasi pada pointer
Pointer mempunyai operasi – operasi diantaranya :
1. Operasi penugasan : operasi tang menimbulkan suatu hasil eksekusi.
2. Oprasi aritmatika : operasi untuk menjalankan data integer dalam bentuk perhitungan
aritmatika.
3. Operasi logika : operasi yang menjalankan perintah logika.
*malloc (size_t size)
PEMBAHASAN
Listing 1
Pada program berikut ini adalah program implementasi pointer :
Program diatas adalah program dimana pointer digunakan untuk menunjuk alamat lain
berikut adalah outputnya :
/*implementasi pointer*/
1. #include <stdio.h> //kamus2. #include <dos.h>3. #include <alloc.h>4. #include <stdlib.h>5. #include <conio.h>
6. void main() //method main7. {8. int *p, *q, *r;9. int n=10;10. p=(int *)malloc(sizeof(int)); //pendeklarasian- 11. q=(int *)malloc(sizeof(int)); //pointer kosong12. p=&n; //p menunjuk alamat n13. *q=120; //nilai pointer q = 12014. r=p; //isi dari r = p15. printf ("*p = %d\n",*p);16. printf ("*q = %d\n",*q);17. printf ("*r = %d\n",*r);18. n=*q; //n menunjuk alamat q19. p=q; //nilai p = q20. printf ("n = %d\n",n);21. printf ("*p = %d\n",*p);22. printf ("*q = %d\n",*q);23. printf ("*r = %d\n",*r);24. getch();25. }
Listing 2
Berikut adalah program yang sama – sama mengimplementasikan pointer untuk
menunjuk alamat lain :
1. /*implementasi pointer1*/
2. #include <stdio.h>3. #include <dos.h> /*kamus*/4. #include <alloc.h>5. #include <stdlib.h>6. #include <conio.h>
7. void main()8. {9. int *p, *q, *r; /*deklarasi pointer*/10. int m=25, n=10; /*deklarasi bilangan bulat*/11. p=(int *)malloc(sizeof(int)); /*instalasi list kosong*/12. q=(int *)malloc(sizeof(int));13. r=(int *)malloc(sizeof(int));14. *p=m;15. q=p;16. r=p;17. m=n;18. p=&n;19. n=*q;20. printf ("*m = %d\n",m);21. printf ("*n = %d\n",n);22. printf ("*p = %d\n",*p);23. printf ("*q = %d\n",*q);24. printf ("*r = %d\n",*r);25. *p=200;26. r=&m;27. *q=75;28. m=*p-*q+*r;29. printf ("\n*m = %d\n",m);30. printf ("*n = %d\n",n);31. printf ("*p = %d\n",*p);32. printf ("*q = %d\n",*q);33. printf ("*r = %d\n",*r);34. getch();35. }
Program diatas akan menghasilkan hasil output berikut :
Yang bagian atas adalah hasil proses pertama sedangkan yang bagian bawah adalah hasil
operasi kedua.
Listing 3
Program pointer dan alamat :
#include <stdio.h>#include <conio.h>
void main(){ int x, y; int *px; //pointer yang menuju ke arah obyek clrscr();
x=87; px=&x; y= *px;
printf ("alamat x = %p\n", &x); printf ("isi px = %p\n", px); printf ("isi x = %i\n", x); printf ("Nilai yang ditunjuk oleh px = %i\n", *px); printf ("Nilai y = %i\n", y); getch();}
Output :
Listing 4
Berikut program operasi pointer yang menggunakan operasi penugasan :
Output :
/*operasi pointer*/#include "stdio.h"#include "conio.h"void main(){ float *x1, *x2, y; clrscr(); y=13.45; x1=&y; x2=x1; printf ("nilai variabel y = %.2f ada di alamat %p\n", y, x1); printf ("nilai variabel y = %.2f ada di alamat %p\n", y, x2); getch();}
Listing 5
Program berikut adalah implementasi pointer yang mempunyai operasi menunjukkan isi
list dan alamatnya serta memproses pointer tersebut :
Hasil dari eksekusi program diatas adalah :
1. #include "stdio.h"2. #include "conio.h"3. #include "dos.h"4. #include "alloc.h"5. #include "stdlib.h"
6. void main()7. {8. int *p, *q, *r;9. int n=10;10. p=(int *)malloc(sizeof(int));11. q=(int *)malloc(sizeof(int));12. p=&n;13. *q=120;14. r=p;15. printf ("isi info pointer :\n");/*menampilkan isi pointer*/16. printf ("*p = %d \n",*p);17. printf ("*q = %d \n",*q);18. printf ("*r = %d \n",*r);19. printf ("alamat register pointer : \n");20. printf ("p = %d \n",p); /*menampilkan alamat pointer*/21. printf ("q = %d \n",q);22. printf ("r = %d \n",r);23. n=*q;24. p=q;25. printf ("\nKondisi akhir isi info pointer : \n");26. printf ("n = %d \n",n);27. printf ("*p = %d \n",*p);28. printf ("*q = %d \n",*q);29. printf ("*r = %d \n",*r);30. getch();31. }32.
Listing 6
Berikut program operasi pointer yang menggunakan operasi artitmatika :
Output :
1. #include "stdio.h"2. #include "conio.h"
3. void main()4. {5. int a=100, b=200, *pa, *pb;6. clrscr();7. pa=&a;8. pb=&b;9. if (pa < pb)10. printf ("pa menunjuk ke memory lebih rendah dari pb\n");11. else if (pa == pb)12. printf ("pa menunjuk ke memory yang sama dengan pb\n");13. else if (pa > pb)14. printf ("pa menunjuk ke memory lebih tinggi dari pb\n");15. getch();16. }
Listing 7
Berikut program operasi pointer yang menggunakan operasi artitmatika :
Program menggunakan operasi aritmatika untuk menunjuk alamat berikut outputnya :
Listing 8
Program berikut ini menggunalan operasi logika untuk mengoperasikan pointer :
1. #include "stdio.h"2. #include "conio.h"
3. void main()4. {5. int nilai[3], *penunjuk;6. clrscr();7. nilai[0]=125;8. nilai[1]=345;9. nilai[2]=750;10. penunjuk = &nilai[0];11. printf ("nilai %i ada di alamat memory %p\n",
*penunjuk, penunjuk);12. printf ("nilai %i ada di alamat memory %p\n",
*penunjuk+1, penunjuk+1);13. printf ("nilai %i ada di alamat memory %p\n",
*penunjuk+2, penunjuk+2);14. getch();15. }
#include "stdio.h"#include "conio.h"char *nama1 = "SPIDERMAN";char *nama2 = "GATOTKACA";
void main(){ //char namax; clrscr(); puts ("\nsemula : \n"); printf ("saya suka >> %s \n", nama1); printf ("tapi saya juga suka >> %s \n", nama2); /*penukaran string yang ditunjuk oleh pointer nama1 dan nama2*/ puts ("\nsekarang : \n"); printf ("saya suka >> %s \n", nama1); printf ("dan saya juga masih suka >> %s \n", nama2); getch();}
Outputnya :
Listing 9
Ada pada tugas
Listing 10
Program yang menggunakan array dan operasi pointernya menunjuk kepada array.
Berikut programnya :
Program diatas menunjukkan akan perbedaan dan persamaan dari pada penunjukkan
dengan array dan pointer. Berikut outputnya :
1. #include "stdio.h"2. #include "conio.h"
3. void main()4. {5. static int tgl_lahir[]= {13,9,1982};6. int *ptgl;7. ptgl = tgl_lahir; /*ptgl berisi alamat array*/8. printf ("diakses dengan pointer\n\n");9. printf ("tanggal = %i\n", *ptgl);10. printf ("bulan = %i\n", *(ptgl+1));11. printf ("tahun = %i\n", *(ptgl+2));12. printf ("diakses dengan array biasa\n\n");13. printf ("tanggal = %i\n", tgl_lahir[0]);14. printf ("bulan = %i\n", tgl_lahir[1]);15. printf ("tahun = %i\n", tgl_lahir[2]);16. getch();17. }
Listing 11
Berikut juga merupakan Program yang menggunakan array dan operasi pointernya
menunjuk kepada array :
Output :
#include "stdio.h"#include "conio.h"
void main(){ int x[5], *p, k; clrscr(); p=x; x[0] = 5; /*x[0] diisi dengan 5 sehinga x[0] = 5*/ x[1] = x[0]; /*x[1] diisi dengan x[0] sehinga x[1] = 5*/ x[2] = *p+2; /*x[2] diisi dengan x[1]-3 sehinga x[2] = 7*/ x[3] = *(p+1)-3; /*x[3] diisi dengan x[1]-3 sehinga x[3] = 2*/ x[4] = *(x+2); /*x[4] diisi dengan *(x+2) sehinga x[4] = 7*/ for (k=0; k<5; k++) printf ("x[%i]=%i\n", k, x[k]); getch();}
TUGAS
Tugas 1
Output daripada program berikut :
Output :
1. #include "stdio.h"2. #include "conio.h"
3. void misteri2 (const char *);
4. main()5. {6. char *string = "ilmu komputer";7. misteri2 (string);8. putchar ('\n');9. return 0;10. }
11. void misteri2 (const char *s)12. {13. for ( ; *s!= '\0' ; s++)14. putchar(*s);15. getch();16. }
Tugas 2
Output dari program berikut :
Output :
Program diatas adalah menghitung isi karakter inputan
1. #include "stdio.h"2. #include "conio.h"
3. int misteri3 (const char *);
4. void main()5. {6. char string [80];7. printf ("ketik sebuah string : ");8. scanf ("%s%", string);9. printf ("%d\n", misteri3(string));10. }
11. int misteri3 (const char *s)12. {13. int x = 0;14. for ( ; *s != '\0' ; s++)15. ++x;16. return x;17. }
Tugas 3
Menjelaskan program contoh 7 (modul)
Program :
Penjelasan :
Baris :
1 – 3 adalah kamus dari program apabila tak ada kamus, maka apa yang kita
tuliskan pada program tak akan dikenali.
4 adalah deklarasi dari fungsi method misteri
5 adalah method main yang digunakan sebagai program utama
7 adalah deklarasi karakter string yang diinputkan “characters”
8 menampilkan inputan pertama.
9 memanggil method misteri
Isi fungsi pada method misteri adalah dimana pointer s tidak sama dengan 0 maka
jika pointer s lebih besar dari pada karakter a dan pointer s lebih kecil dari
karakter z maka isi pointer s pengurangannya sampai 32 kali dan selama pointer s
1. #include "stdio.h"2. #include "conio.h"3. #include "dos.h"4. void misteri(char *);
5. void main()6. {7. char string [] = "characters";8. printf ("string sebelum proses adalah %s\n", string);9. misteri(string);10. printf ("string setelah proses adalah %s\n", string);11. getch();12. }
13. void misteri (char *s)14. {15. while (*s != '\0')16. {17. if (*s >= 'a' && *s <= 'z')18. *s -=32;19. ++s;20. }21. }
tidak sama dengan 0 maka pengulangan s diulang (ditambahkan 1) terus sampai
keadaan false.
Output :
KESIMPULAN
salah satu fasilitas dari bahasa C yang berfungsi untuk melewatkan string dari suatu
fungsi ke fungsi yang lain dengan memugkinkan untuk memakai memori bebas selama proses
eksekusi program. Pointer mempunyai alamat dan alamat tersebut sifatnya khusus dan alamat
pointer setiap computer berbeda – beda.
Pada pointer penunjukan data harus yang memiliki tipe data yang sama. Hubungan
pointer dan array sangatlah erat. Pada pemrograman bahasa C, string bukanlah merupakan tipe
tersendiri melainkan hanyalah jenis khusus dari array, oleh karena itu data string mempunyai
hubungan yang erat dengan pointer. Dengan pointer kita dapat mengolah data string dengan
mengalokasikan variable pointer yang menunjuk ke obyek bertipe char dan menempatkan
konstanta string dalam suatu memori. Kemudian variable pointerpun akan menunjuk ke lokasi
string tersebut. Dalam hal ini penyalinan isi array tidak perlu dilakukan. Sebagai efeknya bisa
menghemat waktu eksekusi.
Dari pembahasan diatas dapat disimpulkan bahwa Pada dasarnya sama yaitu Pointer adalah salah
satu fasilitas dari bahasa C yang berfungsi untuk melewatkan string dari suatu fungsi ke fungsi
yang lain dengan memugkinkan untuk memakai memori bebas selama proses eksekusi program.
Dalam pointer, pointer dapat saja menunjuk pointer yang lain dan pointer yang ditunjuk tersebut
dapat pula menunjuk pointer lagi.
Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu variable internal dapat
diubah oleh fungsi yang dipanggil. Dan Penerapan pointer sebagai parameter yaitu jika
diinginkan agar nilai suatu variable internal dapat diubah oleh fungsi yang dipanggil.