Pointer

Pointer dalam C

Pointer adalah variabel yang menyimpan alamat memori dari variabel lain. Pointer memungkinkan kita untuk mengakses dan memodifikasi data secara langsung melalui alamat memori, yang membuat C sangat fleksibel.

Sintaks

tipe_data *nama_pointer;
  • * (bintang) âžœ Menunjukkan bahwa variabel adalah pointer.

  • nama_pointer âžœ Variabel yang menyimpan alamat memori.

  • tipe_data âžœ Tipe data yang ditunjuk oleh pointer

Contoh Penggunaan

1. Pointer dasar

#include <stdio.h>

int main() {
    int a = 10;
    int *ptr = &a;  // Pointer menyimpan alamat a

    printf("Nilai a: %d\n", a);
    printf("Alamat a: %p\n", &a);
    printf("Nilai pointer ptr: %p\n", ptr);
    printf("Nilai yang ditunjuk pointer: %d\n", *ptr);

    return 0;
}

Hasilnya:

Nilai a: 10
Alamat a: 0x7fff31b8128c (alamat bisa berbeda)
Nilai pointer ptr: 0x7fff31b8128c
Nilai yang ditunjuk pointer: 10
  • ptr = &a; → ptr menyimpan alamat dari a.

  • *ptr → Dereferensi pointer (mengambil nilai di alamat yang ditunjuk).

2. Pointer dan operasi dereferensi

#include <stdio.h>

int main() {
    int a = 5;
    int *p = &a;  // Pointer p menunjuk ke a

    *p = 20;  // Mengubah nilai a melalui pointer

    printf("Nilai a setelah diubah melalui pointer: %d\n", a);
    return 0;
}

Hasilnya:

Nilai a setelah diubah melalui pointer: 20
  • Pointer bisa digunakan untuk mengubah nilai variabel lain secara langsung.

3. Pointer dan array

#include <stdio.h>

int main() {
    int arr[] = {10, 20, 30};
    int *ptr = arr;  // Pointer ke elemen pertama array

    printf("Elemen pertama: %d\n", *ptr);
    printf("Elemen kedua: %d\n", *(ptr + 1));
    printf("Elemen ketiga: %d\n", *(ptr + 2));

    return 0;
}

Hasilnya:

Elemen pertama: 10
Elemen kedua: 20
Elemen ketiga: 30
  • ptr menyimpan alamat arr[0].

  • ptr + 1 menunjuk ke arr[1], ptr + 2 ke arr[2], dst.

  • Pointer bisa digunakan untuk menavigasi array tanpa menggunakan indeks.

4. Pointer ke pointer (double pointer)

#include <stdio.h>

int main() {
    int a = 10;
    int *p = &a;   // Pointer ke int
    int **pp = &p; // Pointer ke pointer

    printf("Nilai a: %d\n", a);
    printf("Nilai melalui *p: %d\n", *p);
    printf("Nilai melalui **pp: %d\n", **pp);

    return 0;
}

Hasilnya:

Nilai a: 10
Nilai melalui *p: 10
Nilai melalui **pp: 10
  • p adalah pointer ke a.

  • pp adalah pointer yang menunjuk ke p (pointer ke pointer).

  • **pp memberikan nilai asli a.

Last updated