Algoritma dan Programming 17-10-2018
Pointers and Array:
POINTERS:syntax: <type> *ptr_name;
dimana : <type>: Tipe data yang disesuai
*ptr_name: nama variable
Pointers adalah variable yang menyimpan alamat dari variable lainnya
Analogi kirim paket A ke rumah Jojo.
untuk mengirim paket A ke rumah Jojo, maka kurir harus menuju alamat
rumah Jojo. Kurir mengetahui alamat rumah Jojo dari alamat yang ditulis di
paket tersebut. Setelah mengetahui alamat rumah Jojo dari paket, Kurir dapat
mengirim paket A ke rumah Jojo. Jika isi dalam paket tersebut diganti B maka
Jojo mendapat paket B.
dalam hal ini: Jojo adalah nama variable
A adalah isi dari variable Jojo dan apa yang dikirim kurir
Alamat Jojo didapat dengan &Jojo
Kurir adalah variable pointer
Alamat yang dituju kurir adalah alamat Jojo
Jika A diganti B oleh kurir maka Jojo mendapat B
Dalam pointer terdapat 2 jenis operator yang sering digunakan:
1. * (asterisk) : (isi dari)
2. & (ampresand) : (alamat dari)
contoh:
int i, *ptr, **ptr2;
ptr = &i;
*ptr = 5; // berarti i = 5 *ptr artinya dereference atau get
value at alamat yang ada di ptr
// seperti int p, i; p = i = 5
pointer juga dapat menunjuk pointer lain atau disebut PTP
seperti Transit dari kurir pertama ke kurir kedua baru ke Jojo
ptr2 = &ptr
**ptr2 = 10; // nilai *ptr dan i juga 10
contoh program:
// Program for untuk mengetahui pointer
#include <stdio.h>
int main() {
int **ptr2, *ptr1, target = 1;
// alamat dapat sama maupun berbeda
ptr1 = ⌖
ptr2 = &ptr1;
printf("Alamat target: %d\n", &target);
printf("Nilai target: %d\n", target);
printf("Alamat ptr1: %d\n", &ptr1);
printf("Nilai ptr1: %d\n", ptr1);
printf("*ptr1: %d\n", *ptr1);
printf("Alamat ptr2: %d\n", &ptr2);
printf("Nilai ptr2: %d\n", ptr2);
printf("**ptr2: %d\n", **ptr2);
return 0;
}
Output:
Alamat target: 6487612
Nilai target: 1
Alamat ptr1: 6487616
Nilai ptr1: 6487612
*ptr1: 1
Alamat ptr2: 6487624
Nilai ptr2: 6487616
**ptr2: 1
Proses:
1. int **ptr2, *ptr1, target = 1: inisialisasi **ptr2, *ptr1 , dan target
2. ptr1 = &target: menyimpan alamat target ke ptr1
3. begitu pula ptr2 = &ptr1;
4. sisanya tertera pada output
5. sekarang lebih fokus pada **ptr2. ptr2 menunjuk alamat yang tertera
pada ptr2 dimana itu adalah alamat ptr1.
6. lalu menunjuk kembali alamat yang tertera pada ptr1 dimana adalah
alamat target lalu memunculkan nilai yang tersimpan di alamat target
yakni 1.
7. untuk *ptr1 proses sama dengan proses ke 6.
ARRAY:
syntax: <type> array_value [value_dim];
dimana : <type>: Tipe data yang disesuai
array_value: nama variable
value_dim: jumlah variable dalam index
Array adalah data yang tersimpan di dalam sesuatu susunan tertentu yang dapat
diakses secara individual maupun kelompok. Beberapa variable dalam array
disimpan dalam nama yang sama tetapi dalam index yang berbeda.
contoh Array:
int a[10];
/* berikut illustrasi array
a[10];
[ | | | | | | | | | ]
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]*/
int b[5] = {1,2,3,4,5};
/* berikut illustrasi array b
[ 1 | 2 | 3 | 4 | 5 ]
a[0] a[1] a[2] a[3] a[4] */
int c[5];
c[5]= {1,2,3,4,5}; // error
int d[4] = {1,2,3,4,5}; // error smaller dimension value
isi Array dapat diakses melalui 2 cara:
a[0] atau *(a+2)
isi array dapat diganti dengan memberi nilai pada array dengan index tersebut
a[1] = 12;
*(a + 1) = 12;
Array dapat dibentuk menjadi 2 dimensi dan 3 dimensi dengan cara:
int A[row][column]; //tinggal ditambah [];
Array paling sering digunakan bersama for seperti:
int e[10]= {1,2,3,4,5,10,6,7,8,9};
for(int i=0; i < 10; i++) {
printf("%d\n", e[i]);
}
ini untuk mencetak setiap value yang tersimpan dalam e
tidak hanya mencetak, dengan cara ini dapat mengganti value value juga
Dalam program C tidak mengenal tipe data string. Maka dari itu untuk digunakan
array of char. yang membedakan string dan char dalam C adalah string diakhiri
dengan '\0' atau NULL <-- ini sangat krusial. untuk membuat string dengan cara:
char f[11]= "HelloWorld";
kenapa lebih, karena sesuai yang tertera di atas string diakhiri dengan '\0'
//backslash zero sehingga dapat menampung semua
String dapat dimanipulasi dengan menggunakan string library
#include<string.h> isi seperti:
strlen(kata)
mengembalikan jumlah huruf, kecuali '\0'
strcpy(s1,s2)
mengduplikat s2 ke s1 -> strcpy("Hari","mau makan?") s1 = mau makan?
strncpy(s1,s2,n)
menduplikat n charakter pertama dari s2 menuju s1
-> strncpy("Hari","maumakan?", 3) s1 =mau
strcat(s1,s2)
menambah s2 pada ujung dari s1
-> strcat("Hari","Maumakan") s1 = HariMaumakan
strncat(s1,s2,n)
menambah s2 pada ujung dari s1 sebanyak n character pertama
-> strncat("Hari","Maumakan") s1 = HariMau
strcmp(s1,s2)
membandingkan nilai s1 dengan s2, kalau sama mengembalikan 0
-> strcmp("Hari","Hari") return 0;
Challenge:
1. mencetak setiap value int h[10] = {1,2,3,4,5,6,7,8,9,10}; dengan pointers
2. membuat program untuk membalik kata "Welcome" menjadi "emocleW" ingat ini
STRING!!
- Stay curious -
NIM: 2201762723
binus.ac.id
skyconnectiva.com
Hubert Michael Sanyoto
Tidak ada komentar:
Posting Komentar