08 December, 2014

Aritmatika Pointer pada Array

Ketika sedang bekerja dengan array ataupun array sebagai pointer, ada baiknya untuk mengetahui operasi dasar pada array yang mungkin dapat membantu Anda untuk memahami penggunaan Array di dalam bahasa C. Sejauh ini, kita sudah memahami bagaimana mengakses elemen yang tersedia pada sebuah array. Ya, pengaksesan melalui indeks elemen merupakan cara satu-satu nya yang kita ketahui sejauh ini jika ingin mendapatkan nilai dari sebuah elemen array. Berdasarkan pernyataan tersebut, itu berarti "indeks merupakan penanda posisi suatu elemen yang berada di dalam sebuah array".


Sejauh ini, mungkin kita tidak pernah berpikir mengapa indeks pada sebuah array dimulai dengan 0, mengapa tidak dimulai dengan 1 saja? Dari sebuah pertanyaan inilah kita akan melangkah ke topik pembahasan kita mengenai "Aritmatika pointer pada Array".

Array Merupakan Semi Pointer

Masih ingatkah Anda bahwa ketika kita ingin memperbaharui nilai dari sebuah variabel array dengan menggunakan fungsi standard scanf kita tidak perlu memberikan operator alamat (&) kepada fungsi scanf tersebut? Kita cukup memberikan nama variabel array yang sudah dideklarasikan sebelumnya saja. Mari lihat contoh di bawah ini.


Sebagai catatan, untuk memperbaharui nilai sebuah array of char, lebih baik untuk tidak menggunakan cara di atas, karena dapat menyebabkan suatu kesalahan yang fatal, untuk lebih lengkapnya, Anda bisa membaca postingan yang sudah di publikasikan disini Fungs fgets alternatif untuk Scanf.  Jika kita melakukan perbandingan sebuah variabel pointer yang menyimpan alamat sebuah array A dengan sebuah array A, maka program akan mengembalikan nilai true. Mari perhatikan contohnya.


Berdasarkan contoh kode program di atas, kita bisa melihat bahwa variabel aNama merupakan variabel pointer, dimana yang sudah kita ketahui bahwa variabel pointer hanya bisa menampung alamat suatu variabel di dalam memori saja, variabel pointer tidak bisa menampung sebuah nilai dari sebuah variabel. Untuk lebih jelasnya mengenai pembahasan tentang dasar-dasar pointer, Anda bisa membacanya pada postingan Pengantar Pointer Bahasa C.


Mengakses Elemen Sebuah Array

Pada topik ini, penulis akan memulai pembahasan utama dari postingan ini.
Sewaktu kompilasi kode program dilakukan dan compiler menemukan pendeklarasian sebuah array, maka compiler akan mengalokasikan ruang kosong untuk penyimpanan nilai-nilai yang ada pada sebuah variabel array dan compiler akan menyimpan alamat dari indeks pertama sebuah array di blok memori sebagai informasi bahwa di "segment blok memori" (cache memory) ini merupakan sebuah variabel array. Mengenai segmentasi blok memori tidak akan dibahas disini, Anda akan menemukan pembahasan tersebut di topik Organisasi dan Arsitektur Komputer. Oleh karena itulah, ketika kita ingin mengakses elemen pertama atau karakter pertama dari sebuah array kita memberikan bilangan 0 di dalam kurung siku sebagai tanda urutan segmentasi blok memori. Ribet juga penjelasannya ya? Oke, mari kita lihat langsung contoh kode program di bawah ini.


Pada contoh kode program di atas, ketika kita ingin mengakses elemen pertama dengan menggunakan cara aritmatika pointer, kita tidak perlu lagi menambahkan bilangan 0 untuk mengakses karakter tersebut (penjelasan hal ini bisa di baca kembali di bagian sebelum kode program ini). Namun, jika Anda tetap ingin menggunakan bilangan 0, Anda bisa menggunakannya juga *(nama + 0). Dalam topik ini, pengetahuan mendasar mengenai pointer sangat diperlukan untuk memahami kode program yang diberikan pada postingan ini. Oke, jika Anda penasaran mengenai penjelasan bahwa compiler menyimpan alamat elemen pertama di blok memori, mari perhatikan kode program berikut ini.

Pada kode program di atas, saya dapat mengakses alamat dari indeks pertama dengan memanggil variabel nama saja. Proses aritmatika disini yang di maksud terjadi pada alamat memori. Jika kita melakukan hal seperti ini *p + 1, maka compiler akan melakukan penjumlahan sebesar 1 * ukuran_tipe_data (dalam Heksadesimal) pada alamat memori yang sedang kita proses komputasi.
Untuk hasil keluaran dari kode program di atas, dapat dilihat pada screenshoot di bawah ini.

Aritmatika Pointer Pada Array
Inilah mengapa indeks sebuah array dimulai dari bilangan 0. Ketika kita ingin mengakses elemen pada posisi ke-2 dengan cara biasa nama[2], maka compiler akan melakukan aritmatika pointer di balik layar *(nama + 2). 

Penutup

Demikianlah untuk postingan kali ini mengenai memahami penggunaan fungsi fgets dalam menginput data. Jika terdapat kekurangan dan tutur kata yang kurang baik, mohon dimaafkan dan jika tidak keberatan mohon menuliskan satu dua kata mengenai postingan ini, baik kritik atau saran agar kedepannya dapat membantu penulis dalam meningkatkan mutu postingan dan pembahasan tentunya. Terima kasih. :)

No comments:

Post a Comment

Berikan komentar, Kritik dan saran teman-teman mengenai blog ini. Komentar, Kritik dan saran teman-teman sangat berarti untuk perkembangan Blog ini.
Salam Blogger, salam kodeprogramcpp.

Lihat Juga Berita Pilihan Ini