• Tidak ada hasil yang ditemukan

MODUL V POINTER DAN STRING

N/A
N/A
Protected

Academic year: 2022

Membagikan "MODUL V POINTER DAN STRING"

Copied!
11
0
0

Teks penuh

(1)

V - 1 MODUL V

POINTER DAN STRING

I. TUJUAN

1. Mahasiswa dapat menjelaskan tentang konsep dari variabel pointer 2. Mahasiswa dapat menjelaskan tentang pointer dan string

3. Mahasiswa dapat menjelaskan tentang pointer yang menunjuk pointer

II. DASAR TEORI

1. VARIABEL POINTER

Pointer merupakan sebuah variabel yang menyimpan alamat memori. Cara mendeklarasikan variabel pointer dengan menggunakan simbol asterisk (*) antara tipe data dan nama variabel. Berikut ini bentuk umum dari pendeklarasian sebuah variabel pointer:

tipe_data *nama_pointer;

Pemberian spasi pada tanda * tidak akan mengubah arti, sehingga penulisan bentuk umum dari deklarasi variabel pointer dapat juga dituliskan sebagai berikut:

tipe_data* nama_pointer;

atau

tipe_data * nama_pointer;

Contoh:

int *a;

char *b;

Pada pernyataan diatas, a dan b adalah variabel pointer. a berisi alamat memori dari tipe int, dan b berisi alamat memori dari tipe char. Secara umum a disebut variabel pointer dari tipe int, dan b disebut variabel pointer dari tipe char.

int *a, b;

Pada pernyataan diatas, hanya a yang merupakan variabel pointer. b merupakan variabel int, bukan variabel pointer.

int *a, *b;

a dan b merupakan variabel pointer dari tipe int.

Operator Alamat (&)

Simbol ampersand (&) disebut sebagai operator alamat, yang merupakan sebuah operator unary yang mengembalikan alamat dari operannya.

Contoh:

int x;

int *y;

Pernyataan:

y = &x;

mengisikan alamat dari x ke y, sehingga x dan nilai dari y menunjuk ke alamat memori yang sama.

(2)

V - 2

Operator Dereference (*)

Simbol asterisk (*) selain digunakan sebagai perkalian juga bisa digunakan debagai operator dereference atau operator indirection, yang menunjuk pada objek (nilai) dari operannya.

Contoh:

int x = 25;

int *p;

p = &x; // mengisikan alamat dari x ke dalam p Pernyataan:

cout << *p << endl;

menampilkan nilai yang disimpan dalam ruang memori yang ditunjuk oleh p, yang merupakan nilai dari x.

Perhatikan pernyataan dibawah ini:

int *p;

int q;

Pada pernyataan diatas, p adalah variabel pointer dari tipe int dan q adalah variabel dari tipe int (Gambar 5.1). Diasumsikan bahwa lokasi memori 1200 dialokasikan untuk p dan lokasi memori 1800 dialokasikan untuk q.

Pernyataan:

q =78;

menyimpan 78 didalam q, yaitu di lokasi memori 1800 (Gambar 5.2).

78 1800

. . .

. . .

. . .

q 1800

p 1200

Main memory

(3)

V - 3

2. TIPE STRING

String digunakan untuk merepresentasikan data yang berupa teks. String merupakan urutan dari satu atau lebih karakter. Dalam C++, string diapit oleh tanda petik dua. Sebelum menggunakan tipe data string, program harus menyertakan header string seperti berikut:

#include <string>

Pernyataan:

string nama = “Pemrograman Lanjut”;

mendeklarasikan nama menjadi variabel string dan menginisialisasikan nama ke “Pemrograman Lanjut”. Posisi dari karakter pertama, P, adalah 0; posisi karakter kedua, e, adalah 1; dst. Posisi dari karakter pertama pada variable string dimulai dari 0, bukan 1.

Perhatikan deklarasi dibawah ini:

string str1, str2, str3;

Pernyataan:

str1 = “Hello There”;

menyimpan string “Hello There” pada str1. Pernyataan:

str2 = str1;

menyalin nilai str1 ke str2.

Jika str1 = “Sunny”, pernyataan:

str2 = str1 + “ Day”;

menyimpan string “Sunny Day” kedalam str2.

Jika str1 = “Hello there”, pernyataan:

str1[6] = ‘T’;

mengganti karakter t dengan karakter T. Posisi dari karakter pertama pada variabel string adalah 0.

Jadi, karena t adalah karakter ketujuh di str1, posisinya adalah 6.

Operasi string Tambahan

Tipe data string terdiri dari beberapa fungsi untuk manipulasi string. Lima fungsi diantaranya adalah:

length, size, find, substr, dan swap.

1) Fungsi length

Fungsi length mengembalikan jumlah karakter di dalam string. Sintaks untuk memanggil fungsi length adalah:

nama_string.length()

dimana nama_string adalah nama variable dari tipe string.

2) Fungsi size

Fungsi size mempunyai kegunaan yang sama dengan fungsi length, yaitu untuk menunjukkan jumlah karakter string. Sintaks-nya adalah sbb:

nama_string.size()

dimana nama_string adalah nama variable dari tipe string.

(4)

V - 4

3) Fungsi find

Substring dalam suatu string dapat dicari dengan menggunakan fungsi find. Sintaks untuk memanggil fungsi find adalah sbb:

nama_string.find(ekspresi_string) atau

nama_string.find(ekspresi_string, pos) 4) Fungsi substr

Fungsi substr digunakan untuk mengambil bagian teks dalam string. Sintaks untuk memanggil fungsi substr adalah sbb:

nama_string.substr(ekspresi1, ekpresi1) Contoh:

string sentence;

string str;

sentence = “It is cloudy and warm.”;

Pada pernyataan:

cout << sentence.substr(0, 5) << endl;

outputnya adalah:

It is

Pada contoh diatas, fungsi substr digunakan untuk mengambil bagian teks dari karakter nol sampai karakter lima.

5) Fungsi swap

Fungsi ini digunakan untuk menukar isi dari dua variabel string. Sintaks dari fungsi swap adalah sbb:

nama_string1.swap(nama_string2);

(5)

V - 5

3. POINTER DAN STRING

Hubungan antara pointer dan string ditunjukkan oleh contoh program 3.

Contoh Program 3:

pkuliah adalah variabel pointer yang menunjuk ke obyek bertipe char dan menempatkan konstanta

“Prolan” dalam suatu memori. Kemudian pointer pkuliah akan menunjuk ke lokasi string “Prolan”

(Gambar 5.5)

Gambar 5.5 Pointer dan string

Hubungan antara pointer dan string juga ditunjukkan oleh contoh program 1. Pada contoh program 1, terdapat dua fungsi yang digunakan untuk menyalin string ke karakter array. Fungsi tersebut menyelesaikan tugas yang sama, tetapi diimplementasikan berbeda.

Pada contoh program1, fungsi copy1 menggunakan notasi subscript array untuk menyalin string s2 ke karakter array s1. Fungsi tersebut mendeklarasikan variabel pencacah integer i untuk digunakan sebagai subscript array. Header struktur for menunjukkan operasi menyalin (copy) secara keseluruhan, sedangkan body dari struktur for adalah pernyataan kosong. Header menetapkan bahwa i diinisialisasi ke nol dan bertambah satu pada setiap iterasi dari loop. Kondisi for, (s1 [i] = s2 [i]) != '\

0', melakukan operasi penyalinan (copy) karakter per karakter dari s2 ke s1. Ketika karakter null ditemui di s2, karakter null di-assign ke s1, dan loop berakhir, karena karakter null adalah sama dengan '\ 0'.

#include <iostream>

using namespace std;

int main() {

char *pkuliah = "Pemrograman Lanjut";

cout << "String yang ditunjuk oleh pkuliah = " <<

pkuliah << endl;

return 0;

}

P r o l a n \n

pkuliah

Lokasi awal string “Prolan”

(6)

V - 6

Contoh Program 1:

Fungsi copy2 menggunakan pointer dan aritmatika pointer untuk menyalin string s2 ke karakter array s1. Header struktur for melakukan seluruh operasi copy. Header tidak termasuk inisialisasi variabel.

Seperti dalam fungsi copy1, kondisi (*s1 = s2)! = '\0' melakukan operasi copy. Pointer s2 adalah dereference, dan karakter hasilnya di-assign ke pointer s1 dereference. Setelah penugasan di dalam kondisi (setelah (* s1 = * s2)! = '\ 0' ), terdapat loop increment yang keduanya merupakan pointer (s1++, s2++), sehingga masing-masing menunjuk ke elemen berikutnya dari array s1 dan karakter berikutnya dari string s2. ketika loop menjumpai karakter null di s2, karakter null di-assign ke pointer s1 dereference dan loop berakhir. Perhatikan bahwa "bagian increment" dari struktur for ini memiliki dua ekspresi increment yang dipisahkan oleh operator koma.

#include <iostream>

using std::cout;

using std::endl;

void copy1(char*, const char*);

void copy2(char*, const char*);

int main() {

char string1[10];

char *string2 = "Hello";

char string3[10];

char string4[] = "Good Bye";

copy1(string1, string2);

cout << "string1 = " << string1 << endl;

copy2(string3, string4);

cout << "string3 = " << string3 << endl;

return 0;

}

void copy1(char *s1, const char *s2) {

for (int i = 0; (s1[i] = s2[i])!='\0';i++);

}

void copy2 (char *s1, const char *s2) {

for (;(*s1 = *s2)!='\0';s1++, s2++);

}

(7)

V - 7

4. Pointer ke pointer

Dalam C++, sebuah pointer dapat menunjuk ke pointer lain yang telah menunjuk ke alamat tertentu.

Kondisi tersebut dinamakan multiple indirection atau pointer ke pointer.

Gambar 5.6 Single Indirection

Gambar 5.7 Multiple Indirection

Pada single indirection, pointer langsung menunjuk ke alamat dari suatu variabel. Pada multiple indirection, terdapat pointer yang menunjuk ke pointer yang sedang menunjuk ke alamat dari suatu variabel. Untuk mendeklarasikan pointer ke pointer, digunakan tanda asterisk sebanyak dua kali (**).

Contoh pendeklarasian pointer ke pointer:

int **p;

Contoh pointer ke pointer dapat dilihat pada contoh program 2.

Contoh Program 2:

Alamat Nilai

Pointer Variabel

Nilai Alamat

Alamat

Variabel Pointer

Pointer

#include <iostream>

using namespace std;

int main() {

int X = 25;

int *P1;

int **P2;

P1 = &X;

P2 = &P1;

// Menampilkan nilai

cout<<"Nilai X : "<<X<<endl;

cout<<"Nilai *P1 : "<<*P1<<endl;

cout<<"Nilai *P2 : "<<*P2<<endl;

cout<<"Nilai **P2 : "<<**P2<<endl;

cout<<endl;

// Menampilkan alamat

cout<<"Nilai &X : "<<&X<<endl;

cout<<"Nilai P1 : "<<P1<<endl;

cout<<"Nilai P2 : "<<P2<<endl;

return 0;

}

(8)

V - 8

Output dari kode program diatas adalah sbb:

Pada contoh diatas, nilai X dapat diakses dengan menggunakan *P1 atau **P2, sedangkan alamat dari variable X dapat diakses dengan menggunakan &X, P, ataupun *P2 (*P2 merupakan nilai yang menempati alamat yang ditunjuk oleh pointer P2). Pointer P2 tidak menunjuk ke tipe data int, akan tetapi menunjuk ke pointer P1. P2 menyimpan alamat dari pointer P1. Untuk contoh diatas, P2 menyimpan alamat 0x22ff04.

Nilai X : 25

Nilai *P1 : 25

Nilai *P2 : 0x22ff08 Nilai **P2 : 25

Nilai &X : 0x22ff08

Nilai P1 : 0x22ff08

Nilai P2 : 0x22ff04

(9)

V - 9

III. GUIDED

1. Pointer

#include <iostream>

using namespace std;

int main() {

int *p;

int x = 37;

cout << "Baris 1: x " << x << endl; //Baris 1 p = &x;

cout << "Baris 3: *p = " << *p << ", x = " << x << endl; //Baris 3 *p = 58;

cout << "Baris 5: *p = " << *p << ", x = " << x << endl; //Baris 5 cout << "Baris 6: Alamat dari p = " << &p << endl; //Baris 6

cout << "Baris 7: Nilai dari p = " << p << endl; //Baris 7 cout << "Baris 8: Nilai dari lokasi memori yang ditunjuk oleh

*p = " << *p << endl; //Baris 8

cout << "Baris 9: Alamat dari x = " << &x << endl; //Baris 9 cout << "Baris 10: Nilai dari x = " << x << endl; //Baris 10 return 0;

} 2. String

#include <iostream>

#include <string>

using namespace std;

int main() {

string str1 = "Pemrograman Lanjut";

string str2 = "C++";

// Menampilkan panjang string cout<<"str1: "<<str1<<endl;

cout<<"str2: "<<str2<<endl;

cout<<"Panjang string str1: " <<str1.size()<<endl;

cout<<"Panjang string str2: " <<str2.length()<<endl;

cout<<"'Lanjut' ditemukan pada indeks ke-" <<str1.find("Lanjut")

<<endl;

cout<<str1.substr(0,9)<<endl;

//menukar string str1.swap(str2);

cout<<"str1: "<<str1<<endl;

cout<<"str2: "<<str2<<endl;

return 0;

}

(10)

V - 10

3. Pointer dan String

#include <iostream>

using std::cout;

using std::endl;

void copy1(char*, const char*);

void copy2(char*, const char*);

int main() {

char string1[10];

char *string2 = "Hello";

char string3[10];

char string4[] = "Good Bye";

copy1(string1, string2);

cout << "string1 = " << string1 << endl;

copy2(string3, string4);

cout << "string3 = " << string3 << endl;

return 0;

}

void copy1(char *s1, const char *s2) {

for (int i = 0; (s1[i] = s2[i])!='\0';i++);

}

void copy2 (char *s1, const char *s2) {

for (;(*s1 = *s2)!='\0';s1++, s2++);

}

4. Pointer ke Pointer

#include <iostream>

using namespace std;

int main() { int X = 25;

int *P1;

int **P2;

P1 = &X;

P2 = &P1;

// Menampilkan nilai

cout<<"Nilai X : "<<X<<endl;

cout<<"Nilai *P1 : "<<*P1<<endl;

cout<<"Nilai *P2 : "<<*P2<<endl;

cout<<"Nilai **P2 : "<<**P2<<endl;

cout<<endl;

// Menampilkan alamat

cout<<"Nilai &X : "<<&X<<endl;

cout<<"Nilai P1 : "<<P1<<endl;

cout<<"Nilai P2 : "<<P2<<endl;

return 0;

}

(11)

V - 11

IV. UNGUIDED

1. Buat program untuk menampilkan sebaris string berikut ini: “Pemrograman Lanjut“ menggunakan variable pointer (pointer to string).

2. Buat potongan program untuk mencetak huruf ketiga ( m ) dari kata : “Pemrograman Lanjut “ dengan menggunakan variabel pointer.

Gambar

Gambar 5.5 Pointer dan string
Gambar 5.7 Multiple Indirection

Referensi

Dokumen terkait

Hasil anlisis peragam dengan menggunakan covariabel bobot badan awal menunjukkan bahwa kelinci lokal yang dipelihara dengan pemberian pakan yang berbeda (P1, P2,.. P3 dan P4)

masuk adalah variable yang memiliki nilai terkecil, dari contoh diatas variable nondasar. X 2 merupakan variable masuk karena memiliki rasio terkecil,

pada etode trend moment, nilai X pada persamaan trend dihitung dengan menjadikan data pertama sebagai tahun dasar dan nilai X=0.. Contoh : sebagaimana data pada kasus

Simulasi pencahayaan alami dan pencahayaan buatan pada gedung Universitas Kristen Petra P1 &amp; P2 dengan menggunakan bantuan program Ecotect memiliki manfaat

Dengan kata lain, pointer berisi alamat dari variable yang mempunyai nilai tertentu.. Sebagai contoh, sebuah variabel P bertipe pointer bernilai 0x0041FF2A, berarti P

Ini tidak seperti pada pass-by-value, method dapat memodifikasi variable asli dengan menggunakan alamat memori tersebut, meskipun berbeda nama variable yang

Prasetyono 2009 mengemukakan cara berhitung perkalian dengan jarimatika menggunakan ketentuan sebagai berikut: Rumus: K1 + K2 P1+P2 + S1 x S2 Keterangan: K1.2 = Basis penambahan dan

Apa contoh penerapan nilai-nilai Pancasila sila pertama dalam kehidupan sehari-hari yang sesuai dengan teks diatas.. Apa contoh penerapan nilai-nilai Pancasila sila pertama yang pernah