Pointer and Arrays
Pendahuluan
Biasanya, ketika kita
mau mengirim barang atau jasa, kita memerlukan sebuah alamat agar kita tahu
tujuan akhir jasa atau barang yang akan dikirim. selain itu, kita pasti harus
tau siapa pengirimnya juga.
Sama halnya dalam dunia
programming, kita juga bisa memberikan sebuah data type suatu nilai sebagai outputnya melalui sebuah pengantara
yang disebut sebagai Pointer.
Pointer
Awalnya banyak orang menganggap bahwa pointer tidak
terlalu berguna dan tidak sering dipakai. Namun setiap fungsi yang terdapat
dalam suatu programming semuanya sangat penting karena mereka memiliki tugas
mereka sendiri termasuk pointer. Sebagai tips, pointer ini justru akan sangat
berguna untuk mempermudah programming struct
atau function.
Penggunaan pointer sangat mudah dimengerti. Biasanya,
format pointer dibuat dengan syntax seperti berikut:
<data type> *nama pointer
Misalnya:
·
Int *point1
·
Char *name
·
Float *count_root
Cara pemakaian pointer adalah sebagai penerima alamat
sebuah data type dan menyimpannya, misalnya seperti contoh programming sebagai
berikut:
int x,y,*ptr;
ptr=&x;
scanf("%d",&*ptr);
for(int i=1;i<=x;i++)
{
for(y=1;y<=i;y++)
{
printf("%d",y);
}
printf("\n");
}
Dari contoh kita mempunyai “*ptr” sebagai pointer dan
untuk “x” sebagai target pointer. Supaya poiner kita menerima alamat dari “int
x” maka dibuat syntax berupa “ptr=&x” karena “&” biasanya digunakan
untuk address sebuah variabel.
Untuk memberikan nilai pada variabel x maka kita tidak
perlu scanf pada x tetapi kita bisa langsung scanf pada pointer. Sebab pointer
sudah menerima alamat x maka syntax nya adalah:
“scanf(“%d”,&*ptr);”
Perlu diingatkan bahwa setiap kali kita ingin scanf
pointer, jangan lupa tanda “*” yang artinya “content of” karena ketika dijalankan, kita bisa menginput
angka tapi tidak akan jalan sebab pada awalnya, data type pointer adalah
“int*ptr”.
Pointer
to Pointer
Selain menggunakan pointer ke variabel lain, kita juga
bisa mengarahkan alamat baru ke pointer lain. Caranya adalah dengan membuat
sebuah pointer baru dengan sedikit pembaharuan yaitu dengan menambahkan tanda
‘*’ pada pointer baru.
maka syntaxnya adalah seperti begini:
·
Int **point2
·
Char **fullname
·
Float **square
Sama seperti yang kita bahas sebelumnya, pointer hanya
menyimpan alamat dan contohnya seperti berikut:
Int main
{
int x,y,*ptr,**pot;
ptr=&x;
pot=&ptr;
scanf("%d",&**pot);
for(int i=1;i<=x;i++)
{
for(y=1;y<=i;y++)
{
printf("%d",y);
}
printf("\n");
}
}
Program coding diatas akan membuat tangga angka secara
beruntun,misalnya kita input angka 4 pada scanf(“%d”,&**pot) maka outputnya
seperti ini:
1
12
123
1234
Dari contoh di atas, *ptr menyimpan alamat x sedangkan **pot menyimpan alamat *ptr.
Oleh karena itu lah, ketika kita menginput 4 ke dalam scanf(“%d”,&**pot), x akan menerima value 4 dan berfungsi
sebagai batas loop for yang akan mencetak 4 tangga angka beruntun.
Karena **pot mengirimkan value 4 melalui *ptr kepada x sehingga dapat disimpulkan bahwa
tujuan awal berupa *ptr berubah menjadi **pot di program tersebut.
Bagaimana kalau kita ingin membuat lebih dari 2 pointer?
Kita hanya perlu membuat pointer baru dan menambahkan jumlah “*” sebelum
pointer baru. misalnya, Kita ingin membuat 4 pointer maka seperti contoh berikut:
1.*ptr
2.**pot
3.***pet
4.****pit
Akan tetapi disarankan agar menggunakan pointer sebaik
mungkin dan jangan berlebihan agar tidak membingungkan diri sendiri saat
membaca coding program.
Arrays
Dalam kehidupan kita sehari-hari, kita selalu menyimpan
barang kita sesuai dengan jenisnya, misalnya baju dengan baju, buku dengan buku
dan lain-lain. Supaya rapi dan dapat langsung digunakan, kita menyimpannya
dalam lemari. Sama halnya dengan programming, biasanya banyak data yang perlu
disimpan agar dapat digunakan lagi, untuk itu maka digunakan lah Array.
Array adalah sebuah alat khusus yang digunakan untuk
menyimpan data yang sejenis dan bisa di akses secara individual atau
sekelompok. Kita bisa menganggap konsep kerja array dan data yang disimpan
seperti lemari dan barang-barang yang sejenis.
Syntax
Array seperti berikut:
Data Type <name> [Dimension_value]
Data Type <name> [Dimension_value]
Contoh Array misalnya:
·
Int a[10];
·
Float percent[20]
·
Char name_id[100]
Skema Array misalnya int a[10] seperti berikut
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
|
A[0]
|
A[1]
|
A[2]
|
A[3]
|
A[4]
|
A[5]
|
A[6]
|
A[7]
|
A[8]
|
A[9]
|
Kenapa hanya sampai posisi kotak Array ke 9, bukan 10?
Karena sistem Array selalu dimulai dari kotak Array posisi nol. Biasanya banyak
orang melupakan posisi Array ke nol. Oleh karena itu, kita bisa menghafal
konsepnya yaitu:
Array[10] = Array[0] - Array[value-1]
Selain memberikan value Array, kita bisa langsung diinisiasikan
secara langsung tanpa value dimensinya, misalnya
Int A[]={1,2,3,4}
Dari contoh diatas, kita bisa menentukan isi valuenya
yaitu 4. Contoh lainya:
Int B[8]={1,2,-4,8}
|
1
|
2
|
-4
|
8
|
0
|
0
|
0
|
0
|
|
B[0]
|
B[1]
|
B[2]
|
B[3]
|
B[4]
|
B[5]
|
B[6]
|
B[7]
|
Di array int B, array posisi 0 sampai 3 diisi sedangkan
sisanya masih 0 karena kosong.
Biasanya, kesalahan yang terjadi dalam Array adalah
inisiasi value yang berlebihan, misalnya:
Int A[3]={1,2,3,4,5}
Dari contoh diatas, dimensional value yang diisi adalah 3
sedangkan inisiasi value nya berisi 5 sehingga mengakibatkan error
Untuk mengakses Array, kita hanya perlu menyebutkan
posisi dimension valuenya. ada 2 cara yang bisa dilakukan misalnya, kita ingin
mencari value Array posisi ke-6 maka:
·
A[6]
·
*(A+6)
Contoh program codingnya seperti berikut:
int main()
{
int A[10]={1,2,3,4,5,6,7,8,9,10};
int a;
scanf("%d",&a);
printf("the
value of A[%d]=%d",a,A[a]);
}
Posisi Array ke 6 memiliki value 7 dan ketika kita
menginput angka 6 ke dalam scanf maka akan diprint di layar berupa "the
value of A[6]=7".
Sama halnya jika program seperti ini:
int main()
{
int A[10]={1,2,3,4,5,6,7,8,9,10};
printf("the
value of A[6]=%d",*(A+6));
}
Hasilnya akan tetap sama yaitu output berupa "the
value of A[6]=7". A yang terdapat dalam dimension valuenya bernilai 0
sehingga bisa ditambah.
Selain mengakses Array, kita juga bisa memberikan value
Array melalui Array lain,misalnya
·
A[6]=17
·
A[4]=9
Maka di Array akan seperti berikut:
|
0
|
0
|
0
|
0
|
9
|
0
|
17
|
0
|
0
|
|
A[0]
|
A[1]
|
A[2]
|
A[3]
|
A[4]
|
A[5]
|
A[6]
|
A[7]
|
A[8]
|
Ditambah lagi, kita bisa memberikan value Array dengan
sistem matematika biasa menggunakan array, misalnya:
int main()
{
int
n[10]={1,2,3,4,5,6,7,8,9,10};
int a;
scanf("%d",&a);
n[2]=n[9]*n[1];
printf("the value of A[%d]=%d",a,n[a]);
}
Dari program tersebut, terjadi perkalian antara Array n
ke 9 dan 1 yang hasilnya ditujukan kepada Array ke 2. Jika inputnya 2 maka,
outputnya akan di print "the value of A[2]=20"
Multi
Dimensional Array
Dimensi array bisa diatur sesuai dengan kebutuhan sang
programmer. Untuk menambahkan dimensi array, kita hanya perlu mengaturnya
sebagai berikut:
<data type> <name> [first dimension] [second
dimension] [...]
Contohnya:
·
Int matrix[100][100];
·
Char table[15][20][25];
Contoh penggunaan Multi Dimensional Array bisa diterapkan
misalnya untuk membuat matriks seperti berikut:
int mat[10][10] ;
int i, j, row, col ;
printf("Enter the order of the matrix : ") ;
scanf("%d %d", &row, &col) ;
printf("\nEnter the elements of the matrix :
\n\n") ;
for(i = 0 ; i < row ; i++)
for(j = 0 ; j < col ; j++)
scanf("%d", &mat[i][j]) ;
printf("\n\nThe elements in the matrix are: \n\n")
;
for(i = 0 ; i < row ; i++){
for(j = 0 ; j < col ; j++){
printf("%d", mat[i][j]) ;
printf("\t");
}
printf("\n");
}
Pada program matriks tersebut, terdapat “int mat[10][10]”
yang berfungsi sebagai array penampung valuenya. Selain berfungsi sebagai
penampung data, kita juga menganggapnya sebagai penentu koordinat baris dan
kolom.
Kita bisa menggambarkan array dua dimensi sebagai sebuah
tabel. Misalnya, jika kita input 2 pada row dan col saat discanf, maka akan
terbentuk gambaran tabel 2
3. Lalu kita input misalnya
{1,2,3,1,4,5}, maka akan terbentuk matriks seperti berikut:
|
1
|
2
|
3
|
|
1
|
4
|
5
|
Seperti yang dijelaskan tadi, array dua dimensi sebagai
penentu koordinat tabel dapat digambarkan sebagai berikut:
|
(0,0)
|
(0,1)
|
(0,2)
|
|
(1,0)
|
(1,1)
|
(1,2)
|
|
1
|
2
|
3
|
|
1
|
4
|
5
|
String
Dalam penggunaan array, kita pasti kenal dengan sebutan
string. String adalah gabungan dari berbagai macam karakter,huruf dan angka.
Data type string tidak diketahui oleh program c karena Syntaxnya sama dengan
array biasa tapi cara memakainya sedikit berbeda. Perhatikan contoh berikut!
#include<stdio.h>
int main()
{
char
word[]="Binus";
printf("%s",word);
}
Pada array char word, kita mendeklarasikan isinya yaitu
string berupa “Binus” lalu ketika diprintf, hasil outputnya akan menjadi
“Binus”. Hal ini dikarenakan type string,“%s”
dipakai untuk mewakili string tersebut.
Bandingkan dengan program berikut!
#include<stdio.h>
#include<string.h>
#include<stdio.h>
#include<string.h>
int main()
{
char
word[]={'B','i','n','u','s'};
for(int
i=0;i<5;i++)
{
printf("%c",word[i]);
}
}
Di program tersebut, kita mendeklarasikan isinya sama
tapi per karakter. selain itu, kita harus menggunakan for supaya hasilnya di
printf semua. Jika kita bandingkan, program yang menggunakan string justru
lebih mudah daripada kita harus mendeklarasi kan isinya per karakter. Apalagi
jika kalimatnya panjang, dengan string, kita bisa menghemat waktu dan ruang
dalam program kita.
Library
String.h
Untuk memanipulasi dan mempermudah kita mengelola string,
terdapat library “string.h”. Dalam string.h ini, terdapat beberapa fungsi yang
sangat membantu kita yaitu:
·
Strrev
·
Strlen
·
Strcmp
·
Dll
Strrev
Dalam library string.h, kita bisa memanipulasi string
dengan syntax sttrev agar string yang kita pilih menjadi terbalik. Contoh
programnya:
#include<stdio.h>
#include<string.h>
int main()
{
char
word[]="rusak";
strrev(word);
printf("%s",word);
}
Dari program diatas, string “kasur” akan dibalikkan
katanya menjadi “rusak”
Strlen
Dalam library string.h, kita bisa menghitung jumlah
karakter yang ada dalam sebuah string dengan syntax strlen. Contoh programnya:
#include<stdio.h>
#include<string.h>
int main()
{
char
word[]="Binus university";
strlen(word);
printf("%d",strlen(word));
}
Dengan strlen, maka kita mengetahui bahwa jumlah karakter
string tersebut adalah 16.
Strcmp
Untuk mengetahui kecocokan suatu string dengan yang lain,
maka kita dapat membandingkan nya dengan syntax strcmp. Contohnya:
#include <stdio.h>
#include <string.h>
int main ()
{
char key[] =
"apple";
char buffer[80];
do {
printf
("Guess my favorite fruit? ");
fflush (stdout);
scanf
("%79s",buffer);
}
while (strcmp (key,buffer) != 0);
puts ("Correct
answer!");
return 0;
}
Pada program
diatas, kita mendeklarasi kan string pertama adalah apple lalu jika kita input
string yang berbeda dari string pertama, maka dia akan mencetak jumlah karakter
yang tidak sesuai.
Lalu di while
nya, kita membuat pernyataan jika hasil karakternya bukan nol, maka kita akan
tetap input sampai hasilnya nol baru lah berhenti. Buktinya, ketika kita
menginput apple, strcmp akan memberikan hasil nol karena kedua string sama
barulah loop berhenti dan di puts “correct answer!”.
Maka, sampai situlah penjelasan kita sini.
Tidak ada komentar:
Posting Komentar