😈
ReverseMe
  • Introduction
  • References
  • ReverseMe
    • Introduction
      • What is Reverse Engineering?
      • Legality of Reverse Engineering
      • Reverse Engineering Communities
  • Programming Language
    • C
      • Basic
        • Pointer
        • Casting
      • Reference
        • stdio.h
          • fclose()
          • fopen()
          • fseek()
          • ftell()
          • fgetc()
          • fgets()
          • fread()
          • fprintf()
          • fwrite()
          • printf()
          • putchar()
          • puts()
          • sprintf()
          • snprintf()
        • stdlib.h
          • malloc()
          • calloc()
          • realloc()
          • free()
          • rand()
          • srand()
        • string.h
          • strcat()
          • strncat()
          • strcmp()
          • strncmp()
          • strcpy()
          • strncpy()
        • time.h
          • time()
  • Reversing Fundamentals
    • Stripped and Unstripped
  • Tools
    • file
    • strings
    • ltrace
    • ghidra
  • CTF Writeups
    • HackTheBox Challenges
      • Baby RE
      • You Cant C Me
  • ABOUT ME
    • Mail
    • LinkedIn
    • GitHub
Powered by GitBook
On this page
  • Sintaks
  • Contoh Penggunaan
  • 1. Pointer dasar
  • 2. Pointer dan operasi dereferensi
  • 3. Pointer dan array
  • 4. Pointer ke pointer (double pointer)
  1. Programming Language
  2. C
  3. Basic

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.

PreviousBasicNextCasting

Last updated 2 months ago