Memahami Hubungan Antara Array dan Pointer dalam C
Hubungan Antara Array dan Pointer
Dalam tutorial ini, Anda akan mempelajari hubungan antara array dan pointer dalam pemrograman C. Anda juga akan mempelajari cara mengakses elemen array menggunakan pointer.
Sebelum Anda mempelajari hubungan antara array dan pointer, pastikan untuk memeriksa dua topik ini:
Array C
Pointer C
Hubungan Antara Array dan Pointer
Array adalah blok data berurutan. Mari kita tulis program untuk mencetak alamat elemen array.
#include <stdio.h> int main() { int x[4]; int i; for(i = 0; i < 4; ++i) { printf("&x[%d] = %p\n", i, &x[i]); } printf("Alamat array x: %p", x); return 0; }
Ada selisih 4 byte antara dua elemen berturut-turut array x. Ini karena ukuran int adalah 4 byte (pada kompilator kami).
Perhatikan bahwa alamat &x[0] dan x sama. Ini karena nama variabel x menunjuk ke elemen pertama array.
Dari contoh di atas, jelas bahwa &x[0] setara dengan x. Dan, x[0] setara dengan *x.
Demikian pula,
&x[1] setara dengan x+1 dan x[1] setara dengan *(x+1).
&x[2] setara dengan x+2 dan x[2] setara dengan *(x+2).
...
Dasarnya, &x[i] setara dengan x+i dan x[i] setara dengan *(x+i).
Contoh 1: Pointer dan Array
#include <stdio.h> int main() { int i, x[6], sum = 0; printf("Masukkan 6 angka: "); for(i = 0; i < 6; ++i) { // Setara dengan scanf("%d", &x[i]); scanf("%d", x+i); // Setara dengan sum += x[i] sum += *(x+i); } printf("Jumlah = %d", sum); return 0; }
Saat Anda menjalankan program, keluaran akan menjadi:
Masukkan 6 angka: 2 3 4 4 12 4 Jumlah = 29
Di sini, kami telah mendeklarasikan array x dengan 6 elemen. Untuk mengakses elemen array, kami telah menggunakan pointer.
Dalam konteks sebagian besar, nama array mereduksi menjadi pointer. Dengan kata sederhana, nama array dikonversi menjadi pointer. Itulah alasan mengapa Anda dapat menggunakan pointer untuk mengakses elemen array. Namun, Anda harus ingat bahwa pointer dan array tidak sama.
Ada beberapa kasus di mana nama array tidak mereduksi menjadi pointer. Untuk mempelajari lebih lanjut, kunjungi: Kapan nama array tidak mereduksi menjadi pointer?