Senin, 12 Mei 2014

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