Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

การประกาศ Pointer to Pointer (Double Pointer) ในภาษา C


การประกาศ Double Pointer

คล้ายการประกาศ Pointer ธรรมดา แต่มี * เพิ่มอีก 1 ตัวหน้าชื่อตัวแปร

ไวยากรณ์

int **ptr;

ตัวอย่างโปรแกรมสมบูรณ์

#include <stdio.h>

int main() {
    int element = 24;
    
    // Single pointer
    int *ptr2 = &element;
    
    // Double pointer
    int **ptr1 = &ptr2;
    
    // แสดงค่าผ่านทั้ง 2 ระดับ
    printf("element value = %d\n", element);
    printf("via single pointer (*ptr2) = %d\n", *ptr2);
    printf("via double pointer (**ptr1) = %d\n", **ptr1);
    
    return 0;
}

ผลลัพธ์:


element value = 24
via single pointer (*ptr2) = 24
via double pointer (**ptr1) = 24

ภาพแสดงความสัมพันธ์

ptr1 (int **) ──────→ ptr2 (int *) ──────→ element (int)
   │                     │                    │
   │                     │                    └── 24
   │                     └── Address of element
   └── Address of ptr2

การใช้งานจริง (Use Cases)

  1. เปลี่ยนค่า Pointer ในฟังก์ชัน - ส่ง int ** เข้าไป เพื่อให้ฟังก์ชันเปลี่ยน address ที่ pointer ชี้ได้
  2. Dynamic 2D Array - int **matrix = malloc(rows * sizeof(int *));
  3. Linked List / Tree - การจัดการ Node pointers
  4. Command Line Arguments - int main(int argc, char **argv)

ตัวอย่าง: เปลี่ยน Pointer ในฟังก์ชัน

void allocate(int **ptr, int size) {
    *ptr = malloc(size * sizeof(int)); // เปลี่ยนค่า pointer ต้นทาง
}

int main() {
    int *p = NULL;
    allocate(&p, 10); // ส่ง address ของ p
    // ตอนนี้ p ชี้ไปที่หน่วยความจำที่จองไว้ 10 int
    free(p);
    return 0;
}