Apa itu pointer dan apa fungsinya?

P06 | Pointer dan Fungsi Modul Praktikum FI2283 Pemrograman dan Simulasi Fisika Versi 2013.10.21

Catatan. Dalam praktikum ini akan dipelajari mengenai pointer, fungsi, dan membuat berkas pustaka sendiri (*.h). 1 Pointer #1

77

2 Pointer #2

78

3 Pointer #3

79

4 Pointer #4

80

5 Pointer #5

81

6 Fungsi #1

82

7 Fungsi #2

83

8 Fungsi #3

84

9 Fungsi #4

85

10 Fungsi #5

86

1

Pointer #1

Perhatikan kode berikut ini /* pointer_1.cpp 77

Learn about pointer Sparisoma Viridi 20131021.0225 */ #include

using namespace std; int main(int argc, char **argv) { // Declare a pointer of int type; int *pint; // Show address of it cout << pint << endl; // Show value of it cout << *pint << endl; return 0; }

Tugas 1. Salin kode di atas dengan nama berkas pointer 1.cpp, kompilasi, dan jalankan. Jelaskan mengapa hasil tersebut diperoleh. Buka halaman web http://stackoverflow.com/questions/17873561/pointer-initialisation-gives -segmentation-fault untuk penjelasanan lebih lanjut. Laporkan dalam berkas laporan.txt.

2

Pointer #2

Perhatikan kode berikut ini /* pointer_2.cpp Learn about pointer Sparisoma Viridi 20131021.0259 */ #include

#include <stdlib.h>

78

using namespace std; int main(int argc, char **argv) { // Declare a pointer of int type pointing to nothing, // its size is zero, and it has no value int *pint = NULL; // Set size of pointer pint = (int*) malloc(sizeof(int)); // Set the value *pint = 1234; // Show address of it cout << pint << endl; // Show value of it cout << *pint << endl; // Free it from memory free(pint); return 0; }

Tugas 2. Salin kode di atas dengan nama berkas pointer 2.cpp, kompilasi, dan jalankan. Jelaskan mengapa hasil tersebut diperoleh. Modifikasi sehingga dapat menggunakan pointer dengan jenis variabel double, simpan dalam berkas pointer 2b.cpp. Laporkan perubahan yang diperlukan dari berkas pointer 2.cpp ke pointer 2b.cpp dalam berkas laporan.txt.

3

Pointer #3

Perhatikan kode berikut ini /* pointer_3.cpp Learn about pointer Sparisoma Viridi 20131021.0300 */ #include

79

#include <stdlib.h> using namespace std; int main(int argc, char **argv) { // Declare variabel of type int int i = 234; // Declare a pointer of type int int *pint = NULL; pint = (int*) malloc(sizeof(int)); *pint = 234; // Show the value cout << i << endl; cout << *pint << endl; // Show the address cout << &i << endl; cout << pint << endl; free(pint); return 0; }

Tugas 3. Salin kode di atas dengan nama berkas pointer 3.cpp, kompilasi, dan jalankan. Modifikasi program di atas sehingga dapat membandingkan nilai yang ditunjuk oleh dua buah pointer dan address dari dua buah pointer. Tampilkan hasilnya pada konsol. Jelaskan perintah yang digunakan dalam dalam berkas laporan.txt.

4

Pointer #4

Perhatikan kode berikut ini /* pointer_4.cpp Learn about pointer Sparisoma Viridi 20131021.0308 */

80

#include

#include <stdlib.h> using namespace std; int main(int argc, char **argv) { // Declare variabel of type int int i = 234; // Declare a pointer of type int int *pint = NULL; pint = (int*) malloc(sizeof(int)); pint = &i; // Show the value cout << i << endl; cout << *pint << endl; // Show the address cout << &i << endl; cout << pint << endl; // Change value of i i = 987; // Set it points to no non-pointer variabe // before frees it pint = NULL; free(pint); return 0; }

Tugas 4. Salin kode di atas dengan nama berkas pointer 4.cpp, kompilasi, dan jalankan. Modifikasi program di atas sehingga dapat menampilkan nilai dari i dan nilai yang ditunjukkan oleh pint. Tampilkan hasilnya pada konsol. Jelaskan perintah yang digunakan dalam dalam berkas laporan.txt.

5

Pointer #5

Perhatikan kode berikut ini /* 81

pzointer_5.cpp Learn about pointer Sparisoma Viridi 20131021.0316 */ #include

#include <stdlib.h> using namespace std; int main(int argc, char **argv) { int i = 234; int j = 987; int *p1 = &i; int *p2 = &j; *p1 = 10; *p2 = 20; *p2 = *p1; p2 = p1; *p2 = 399; cout << "i = " << i << endl; cout << "j = " << j << endl; return 0; }

Tugas 5. Salin kode di atas dengan nama berkas pointer 5.cpp, kompilasi, dan jalankan. Modifikasi program di atas sehingga dapat menampilkan nilai dari i dan j. Tampilkan hasilnya pada konsol. Jelaskan perintah yang digunakan dalam dalam berkas laporan.txt.

6

Fungsi #1

Perhatikan kode berikut ini /* function_1.cpp 82

Learn about function Sparisoma Viridi 20131021.0340 */ #include

#include <stdlib.h> using namespace std; void inc(int); int main(int argc, char *argv[]) { int i = 0; cout << i << endl; cout << endl; inc(i); cout << i << endl; } void inc(int i) { i++; }

Tugas 6. Salin kode di atas dengan nama berkas fungsi 1.cpp, kompilasi, dan jalankan. Jelaskan apa yang salah dari maksud program ini dalam laporan.txt.

7

Fungsi #2

Perhatikan kode berikut ini /* function_1.cpp Learn about function Sparisoma Viridi 20131021.0340 */ #include

#include <stdlib.h>

83

using namespace std; void inc(int); int main(int argc, char *argv[]) { int i = 0; cout << i << endl; cout << endl; inc(i); cout << i << endl; } void inc(int i) { i++; }

Tugas 7. Salin kode di atas dengan nama berkas fungsi 2.cpp, kompilasi, dan jalankan. Jelaskan bagaimana modifikasi dapat mengoreksi permasalahan dalam contoh program sebelumnya, laporkan dalam laporan.txt. Buat program dengan nama berkas fungsi 2b.cpp agar dapat mengurangi satu setiap nilai integer yang dimasukkan. Berinama fungsinya dengan dec().

8

Fungsi #3

Perhatikan kode berikut ini /* function_3.cpp Learn about function Sparisoma Viridi 20131021.0350 */ #include

#include <stdlib.h> using namespace std; void disp(int *); void disp(int *, int);

84

int main(int argc, char *argv[]) { int x[5] = {9, 3, 1, 7, 5}; int N = sizeof(x) / sizeof(*x);

} void disp(int *z) { int N = sizeof(z) / sizeof(*z); for(int i = 0; i < N; i++) { cout << z[i]; if(i < N - 1) cout << " "; else cout << endl; } } void disp(int *z, int N) { for(int i = 0; i < N; i++) { cout << z[i]; if(i < N - 1) cout << " "; else cout << endl; } }

Tugas 8. Salin kode di atas dengan nama berkas fungsi 3.cpp, kompilasi, dan jalankan. Modifikasi sehingga dapat menjalankan fungsi void disp(int *) dan void disp(int *, int). Jelaskan apa perbedaan kedua fungsi tersebut dalam laporan.txt.

9

Fungsi #4

Perhatikan kode berikut ini /* function_4.cpp Learn about function and array template Sparisoma Viridi 20131021.0425

85

Compile: g++ function_4.cpp -o function_4 -std=c++0x */ #include

#include <array> const int N = 5; using namespace std; void disp(array); int main(int argc, char *argv[]) { array x = {9, 1, 5, 3, 8}; disp(x); } void disp(array z) { int N = z.size(); for(int i = 0; i < N; i++) { cout << z[i]; if(i < N - 1) cout << " "; else cout << endl; } }

Tugas 9. Salin kode di atas dengan nama berkas fungsi 4.cpp, kompilasi, dan jalankan. Jelaskan bagaimana program tersebut bekerj tersebut dalam laporan.txt.

10

Fungsi #5

Tugas 10. Perluas program fungsi 3.cpp sehingga dapat memiliki fungsi sort(int *, int) yang berfungsi untuk mengurutkan array. Simpan hasil tugas ini dengan nama fungsi 5.cpp dan laporkan cara kerjanya dalam laporan.txt.

86

Keluaran praktikum 1. pointer 1.cpp, pointer 2.cpp, pointer 2b.cpp, pointer 3.cpp, pointer 4.cpp, pointer 5.cpp, fungsi 1.cpp, fungsi 2.cpp, fungsi 2b.cpp, fungsi 3.cpp, fungsi 4.cpp, dan fungsi 5.cpp. 2. laporan.txt yang berisikan jawaban dari Tugas 1-10.

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. 1 1 Sparisoma

Viridi

, .., 2013

87

.

88

Jelaskan apa fungsi pointer?

Pointer berguna untuk mentransfer data yang memiliki kapasitas besar, melalui suatu fungsi. Pointer sangat erat kaitannya dengan array, sehingga variabel pointer dapat menggantikan fungsi dan variabel array.

Apa yang dimaksud pointer dalam pemrograman?

Pointer merupakan variabel yang dapat memegang alamat dari suatu objek dalam memori. Pointer digunakan dalam program untuk mengakses dan manipulasi data pada alamat tertentu.

Apa fungsi pointer di C++?

Pointer adalah sebuah variabel khusus yang berisi alamat memori. Pointer nantinya akan bisa mengakses data yang ada di suatu alamat memori.

Apa manfaat pointer dalam kehidupan sehari hari?

Pointer berguna untuk mentransfer data yang mempunyai kapasitas besar, melalui suatu fungsi.