Array dan pointer
berhubungan dalam C dan dapat digunakan secara bergantian. Array dapat dianggap
sebagai pointer konstan. Pointer dapat digunakan untuk melakukan operasi yang melibatkan
array subscripting.
Seandainya integer
array b[5] dan bPtr adalah variabel integer pointer yang telah didefinisikan. Kita
dapat mengatur bPtr sama dengan alamat elemen pertama dalam array b dengan
pernyataan (bPtr
= b;).
Pernyataan ini setara dengan elemen array dengan pernyataan (bPtr = &b[ 0 ];)
Elemen array b[3] dapat
dirujuk dengan ekspresi pointer *( bPtr + 3 ). Angka
3 adalah offset untuk pointer. Saat pointer menunjuk ke awal array, offset
berfungsi menunjukkan elemen array yang harus dirujuk dan nilai offset identik
dengan subskrip array. Notasi sebelumnya disebut sebagai penunjuk offset
notasi. Kurung diperlukan karena * lebih didahulukan dari +. Tanpa tanda kurung,
ekspresi * bPtr akan dijalankan terlebih dahulu baru melakukan penambahan.
Array itu sendiri dapat
diperlakukan sebagai pointer dan digunakan di aritmatika pointer. Secara umum,
semua ekspresi subscripted array dapat ditulis dengan pointer dan offset. Dalam
kasus ini, pointer offset digunakan dengan nama array sebagai pointer.
Ingat bahwa nama array
dasarnya pointer konstan sehingga selalu mengarah ke awal array. Dengan
demikian, ekspresi b += 3 tidak valid karena ia berusaha untuk
mengubah nilai nama array dengan pointer aritmatika.
Untuk
lebih lanjut menggambarkan kemampuan array dan pointer, mari kita lihat dalam program.
Fungsi copy1 adalah untuk menyalin string di dalam s2 ke karakter
array s1. Fungsi variabel counter i adalah sebagai array subskrip. Header
menunjukkan bahwa i diinisialisasi ke nol dan bertambah satu setiap kali dari
loop. Ekspresi s1 [i] = [i] menyalin satu karakter dari s2 ke s1. Loop berakhir
karena nilai integer karakter null adalah nol (palsu).
Fungsi copy2
menggunakan pointer dan pointer aritmatika untuk mengcopy string di s2 ke
karakter array s1. Header tidak termasuk inisialisasi variabel. Seperti dalam fungsi
copy1, ekspresi (* s1 = * s2) melakukan operasi copy. Setelah itu pointer
bertambah untuk menunjuk ke elemen seterusnya yaitu array s1 dan karakter
berikutnya string s2.
Argumen pertama untuk
copy1 dan copy2 harus menjadi sebuah array yang cukup besar untuk menampung string
dalam argumen kedua. Jika tidak, kesalahan dapat terjadi ketika digunakan untuk
menulis ke lokasi memori yang bukan merupakan bagian dari array. Kedua fungsi parameter
masing masing dinyatakan sebagai const char *. Dalam kedua fungsi, argumen
kedua disalin ke argumen pertama. Oleh karena itu, parameter kedua dinyatakan untuk
menunjuk ke nilai konstan.
0 komentar:
Posting Komentar