6. pemrograman pointer

5
1 BAB VIII PEMROGRAMAN POINTER Pertemuan Minggu XI dan XII Alokasi Waktu : 4 Jam Pertemuan Standar Kompetensi : Mahasiswa dapat membuat program komputer sederhana dengan menggunakan bahasa C Kompetensi Dasar : Memahami program komputer yang menggunakan struktur Pointer Indikator : Mahasiswa dapat memahami struktur program bahasa C yang mengandung Pointer : Mahasiswa dapat membuat program dengan melibatkan Pointer pointer adalah variabel yang menyimpan alamat memori. Alamat ini adalah lokasi obyek lain (biasanya variabel lain) di memori. Misalnya, jika satu variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variable kedua. Analogy konsep pointer adalah ketika kita ingin berkenalan dengan seseoarang akan tetapi kita tidak dapat menyapanya secara langsung maka biasanya kita akan bertanya kepada teman atau sahabatnya yang kebetulan kita kenal. Orang yang kita tanya perihal seseorang yang ingin kita ketahui identitasnya adalah seorang Pointer (Penunjuk). Analogy yang lain ketika kita ingin berkunjung ke suatu alamat akan tetapi kita tidak tahu di daerah mana alamat tersebut berada maka kita akan bertanya kepada orang yang kita anggap tahu tentag alamat tersebut, orang yang memberikan penjelasan tentang perihal alamat yang kita tanyakan itulah yang kita sebuat dengan Pointer. Poiter adalah variabel yang berisi alamat memori variabel lain dan secara tidak langsung menunjuk ke variabel tersebut. Sebagai contoh Andi berteman dengan Budi, lalu anda ingin mengetahui jumlah keluarga Budi untuk keperluan sensus penduduk. Anda tidak mengetahui alamat Budi, tetapi anda mengenal Andi. Untuk mencari jumlah keluarga Budi, maka pertama-tama anda pergi ke rumah Andi, misalnya di rumah No. 8321. Sesampai di Andi, Andi membaritahukan kepada anda bahwa alamat Budi ada pada alamat 9821. Kemudian anda pergi ke rumah Budi lalu mencatat jumlah keluarga yang dimiliki Budi yaitu lima orang (misalkan). Dalam contoh di atas, Andi bertindak sebagai pointer. Andi tidak memberitahukan jumlah keluarga Budi, tetapi Andi memberitahu alamat Budi, di alamat 9821 (alamat Budi) itulah Anda mengetahui jumlah keluarga Budi. Jika alamat dari ditunjukkan dengan simbol & dan isi dari ditunjukkan dengan symbol *, maka hubungan analogi di atas adalah: Jika variabel akan menjadi penunjuk, itu harus dinyatakan sebagai demikian. Sebuah deklarasi pointer terdiri dari jenis dasar, *, dan nama variabel. Bentuk umum untuk mendeklarasikan variabel pointer Tipe *nama_variabel ketika Anda menyatakan pointer brtipe int *, maka compiler mengasumsikan bahwa semua alamat yang akan ditunjuk oleh varibel pointer tersebut menunjuk ke sebuah variable yang betipe integer.

Upload: roziq-bahtiar

Post on 13-Jan-2015

124 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 6. pemrograman pointer

1

BAB VIII PEMROGRAMAN POINTER

Pertemuan Minggu XI dan XII

Alokasi Waktu : 4 Jam Pertemuan

Standar Kompetensi : Mahasiswa dapat membuat program komputer sederhana dengan menggunakan bahasa C

Kompetensi Dasar : Memahami program komputer yang menggunakan struktur Pointer

Indikator : Mahasiswa dapat memahami struktur program bahasa C yang mengandung Pointer

: Mahasiswa dapat membuat program dengan melibatkan Pointer

pointer adalah variabel yang menyimpan alamat memori. Alamat ini adalah lokasi obyek lain (biasanya variabel lain) di memori. Misalnya, jika satu variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variable kedua. Analogy konsep pointer adalah ketika kita ingin berkenalan dengan seseoarang akan tetapi kita tidak dapat menyapanya secara langsung maka biasanya kita akan bertanya kepada teman atau sahabatnya yang kebetulan kita kenal. Orang yang kita tanya perihal seseorang yang ingin kita ketahui identitasnya adalah seorang Pointer (Penunjuk). Analogy yang lain ketika kita ingin berkunjung ke suatu alamat akan tetapi kita tidak tahu di daerah mana alamat tersebut berada maka kita akan bertanya kepada orang yang kita anggap tahu tentag alamat tersebut, orang yang memberikan penjelasan tentang perihal alamat yang kita tanyakan itulah yang kita sebuat dengan Pointer.

Poiter adalah variabel yang berisi alamat memori variabel lain dan secara tidak langsung menunjuk ke variabel tersebut. Sebagai contoh Andi berteman dengan Budi, lalu anda ingin mengetahui jumlah keluarga Budi untuk keperluan sensus penduduk. Anda tidak mengetahui alamat Budi, tetapi anda mengenal Andi. Untuk mencari jumlah keluarga Budi, maka pertama-tama anda pergi ke rumah Andi, misalnya di rumah No. 8321. Sesampai di Andi, Andi membaritahukan kepada anda bahwa alamat Budi ada pada alamat 9821. Kemudian anda pergi ke rumah Budi lalu mencatat jumlah keluarga yang dimiliki Budi yaitu lima orang (misalkan). Dalam contoh di atas, Andi bertindak sebagai pointer. Andi tidak memberitahukan jumlah keluarga Budi, tetapi Andi memberitahu alamat Budi, di alamat 9821 (alamat Budi) itulah Anda mengetahui jumlah keluarga Budi. Jika alamat dari ditunjukkan dengan simbol & dan isi dari ditunjukkan dengan symbol *, maka hubungan analogi di atas adalah:

Jika variabel akan menjadi penunjuk, itu harus dinyatakan sebagai demikian. Sebuah deklarasi pointer terdiri dari jenis dasar, *, dan nama variabel. Bentuk umum untuk mendeklarasikan variabel pointer Tipe *nama_variabel

ketika Anda menyatakan pointer brtipe int *, maka compiler mengasumsikan bahwa semua alamat yang akan ditunjuk oleh varibel pointer tersebut menunjuk ke sebuah variable yang betipe integer.

Page 2: 6. pemrograman pointer

2

Contoh 8.1 #include <stdio.h> #include <conio.h> main() { int x = 99; int *p1, *p2; p1 = &x; p2 = p1; /* print the value of x twice */ printf("Values at p1 and p2: %d % d\n", *p1, *p2); /* print the address of x twice */ printf("Addresses pointed to by p1 and p2: %p %p", p1, p2); getch(); }

Contoh 8.2 #include <stdio.h> #include <conio.h> main() { int U = 3; int v; int *pu; /* pointer t o an integer */ int *pv; /* pointer t o an integer */ pu = &U; /* assign address of U t o pu */ v = *pu; /* assign value of U t o v */ pv = &v; /* assign address of v t o pv */ printf("\nu=%d &u=%X pu=%X *pu=%d", U, &U, pu, *pu); printf("\n\nv=%d &v=%X pv=%x *pv=%d", v, &v, pv, *pv); getch(); }

Pada program diatas menyatakan pointer *s digunakan sebagai penunjuk variable kata yang berbentuk array dan bertipe char. Pointer *s ini digunakan sebagai argument fungsi hitung yang akan mengembalikan nilai integer apabila fungsi hitung tersebut dipanggil. Dengan kata lain fungsi hitung akan memberikan nilai berupa angka dari suatu masukan yang diberikan pada variable kata yang berupa sederet char (string).

Contoh 8.3

Page 3: 6. pemrograman pointer

3

#include <stdio.h> #include <conio.h> void tukar(int *a, int *b); main() { int x,y; printf("Masukan nilai ke 1: "); scanf("%d",&x); printf("Masukan nilai ke 2: "); scanf("%d",&y); tukar(&x,&y); printf ("Setelah ditukarkan Nilai ke 1 %d\n",x); printf ("Setelah ditukarkan Nilai ke 2 %d",y); getch(); } void tukar(int *a, int *b) { int smt; smt = *a; *a = *b; *b = smt; }

Contoh 8.4 #include <stdio.h> #include <conio.h> main() { int number = 0; /* A variable of type int initialized to 0 */ int *pointer = NULL; /* A pointer that can point to type int */ number = 10; printf("\nnumber's address: %p", &number); /* Output the address */ printf("\nnumber's value: %d\n\n", number); /* Output the value */ pointer = &number; /* Store the address of number in pointer */ printf("pointer's address: %p", &pointer); /* Output the address */ printf("\npointer's size: %d bytes", sizeof(pointer)); /* Output the size */ printf("\npointer's value: %p", pointer); /* Output the value (an address) */ printf("\nvalue pointed to: %d\n", *pointer); /* Value at the address */ getch(); }

Contoh 8.5 #include <stdio.h>

Page 4: 6. pemrograman pointer

4

#include <conio.h> void funct1 (int U, int v); /* function prototype */ void funct2 (int *pu, int *pv); /* function prototype */ main () { int u = 1; int v = 3; printf ( "\n Before calling functl : u=%d v=%d", u, v); funct1 (u, v); printf ( "\n After calling functl : u=%d v=%d", u, v); printf ("\n\n Before calling funct2: u=%d v=%d", u, v) ; funct2(&u, &v); printf ("\n After calling funct2: u=%d v=%d", u, v); getch(); } void funct1 (int U, int v) { U = 0; v = 0; printf ( " \n Within functl : u=%d v=%d", U, v); return; } void funct2 (int *pu, int *pv) { *pu = 0; *pv = 0; printf ("\n Within funct2: *pu=%d *pv=%d", *pu, *pv) ; return; }

Pengayaan Latihan 8.1

#include <stdio.h> #include <conio.h> int hitung(char *s); main() { char kata[80]; printf("Masukan Sebuah Kata : \n"); scanf("%s",&kata); printf("%d",hitung(kata)); getch(); } int hitung(char *s)

Page 5: 6. pemrograman pointer

5

{ int i=0; for (;*s!='\0'; *s++) i++; return(i); } Latihan 8.2 #include <conio.h> #include <stdio.h> #include <stdlib.h> #define size 10 void push(int i); int pop(void); int *tos, *p1, stack[size]; main() { int value; p1 = stack; tos = stack; do { printf("Enter value: "); scanf("%d", &value); if(value != 0) push(value); else {printf("value on top is %d\n", pop()); printf("Alamat Memori %p\n",(p1+1));} } while(value != -1); getch(); } void push(int i) { p1++; if(p1 == (tos+size)) { printf("Stack Overflow.\n"); exit(1); } *p1 = i; } int pop(void) { if(p1 == tos) { printf("Stack Underflow. \n"); exit(1); } p1--; return *(p1+1); }