Hubungan Antara Array dan Pointer
Hubungan Antara Array dan Pointer
Dalam tutorial ini, Anda akan belajar tentang hubungan antara array dan pointer dalam pemrograman C. Anda juga akan belajar mengakses elemen array menggunakan pointer.
Sebelum Anda mempelajari tentang hubungan antara array dan pointer, pastikan untuk memeriksa dua topik berikut:
Hubungan Antara Array dan Pointer
Array adalah blok data berurutan. Mari kita menulis 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("Address of array x: %p", x);
return 0;
}
Keluaran
&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
Address of array x: 1450734448
Ada perbedaan 4 byte antara dua elemen berurutan dari array x . Itu karena ukuran int
adalah 4 byte (pada kompiler kami).
Perhatikan bahwa, alamat &x[0] dan x adalah sama. Itu karena nama variabel x menunjuk ke elemen pertama larik.
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)
.
- ...
- Pada 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("Enter 6 numbers: ");
for(i = 0; i < 6; ++i) {
// Equivalent to scanf("%d", &x[i]);
scanf("%d", x+i);
// Equivalent to sum += x[i]
sum += *(x+i);
}
printf("Sum = %d", sum);
return 0;
}
Saat Anda menjalankan program, outputnya adalah:
Enter 6 numbers: 2
3
4
4
12
4
Sum = 29
Di sini, kita telah mendeklarasikan sebuah array x dari 6 elemen. Untuk mengakses elemen array, kita telah menggunakan pointer.
Dalam kebanyakan konteks, nama array membusuk menjadi pointer. Dengan kata sederhana, nama array diubah 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 berubah menjadi pointer. Untuk mempelajari lebih lanjut, kunjungi:Kapan nama array tidak berubah menjadi pointer?
Contoh 2:Array dan Pointer
#include <stdio.h>
int main() {
int x[5] = {1, 2, 3, 4, 5};
int* ptr;
// ptr is assigned the address of the third element
ptr = &x[2];
printf("*ptr = %d \n", *ptr); // 3
printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
printf("*(ptr-1) = %d", *(ptr-1)); // 2
return 0;
}
Saat Anda menjalankan program, outputnya adalah:
*ptr = 3
*(ptr+1) = 4
*(ptr-1) = 2
Dalam contoh ini, &x[2]
, alamat elemen ketiga, ditetapkan ke ptr penunjuk. Oleh karena itu, 3
ditampilkan saat kami mencetak *ptr
.
Dan, mencetak *(ptr+1)
memberi kita elemen keempat. Demikian pula, mencetak *(ptr-1)
memberi kita elemen kedua.