pembahasan pointer dalam bahasa c

20
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.

Upload: harly-yoga-p

Post on 29-Nov-2015

90 views

Category:

Documents


2 download

DESCRIPTION

Pointer atau Penunjuk

TRANSCRIPT

Page 1: Pembahasan Pointer dalam Bahasa C

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;

Page 2: Pembahasan Pointer dalam Bahasa C

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)

Page 3: Pembahasan Pointer dalam Bahasa C

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. }

Page 4: Pembahasan Pointer dalam Bahasa C

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. }

Page 5: Pembahasan Pointer dalam Bahasa C

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();}

Page 6: Pembahasan Pointer dalam Bahasa C

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();}

Page 7: Pembahasan Pointer dalam Bahasa C

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.

Page 8: Pembahasan Pointer dalam Bahasa C

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. }

Page 9: Pembahasan Pointer dalam Bahasa C

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();}

Page 10: Pembahasan Pointer dalam Bahasa C

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. }

Page 11: Pembahasan Pointer dalam Bahasa C

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();}

Page 12: Pembahasan Pointer dalam Bahasa C

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. }

Page 13: Pembahasan Pointer dalam Bahasa C

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. }

Page 14: Pembahasan Pointer dalam Bahasa C

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. }

Page 15: Pembahasan Pointer dalam Bahasa C

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.

Page 16: Pembahasan Pointer dalam Bahasa C

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.