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

Array of Pointers ในภาษา C

ความหมายของ Pointer

Pointer คือตัวแปรที่เก็บที่อยู่ของตัวแปรอื่น

คุณสมบัติของ Pointer

  • ประหยัดหน่วยความจำ
  • เข้าถึงหน่วยความจำโดยตรง เร็วกว่า
  • จัดสรร/คืนหน่วยความจำแบบไดนามิกได้
  • ใช้กับโครงสร้างข้อมูล (data structures)

การประกาศและ Initialize Pointer

int qty = 179;
int *p;        // ประกาศ pointer
p = &qty;      // initialize ด้วย address-of operator

Array of Pointers

อาร์เรย์ที่แต่ละ element เป็น pointer (เก็บที่อยู่)

การประกาศ

datatype *ptr_name[size];

ตัวอย่าง: int *p[5]; // array 5 pointers ชี้ int

การ Initialize

int a[3] = {10, 20, 30};
int *p[3];
for (int i = 0; i < 3; i++)
    p[i] = &a[i]; // หรือ p[i] = a + i;

การเข้าถึงค่า

for (int i = 0; i < 3; i++)
    printf("%d ", *p[i]); // dereference

ตัวอย่างโปรแกรมที่ 1: Array of Pointers to Int

#include <stdio.h>
int main() {
    int a[3] = {10, 20, 30};
    int *p[3], i;
    for (i = 0; i < 3; i++)
        p[i] = &a[i];
    printf("ค่าใน array:\\n");
    for (i = 0; i < 3; i++)
        printf("%d\\t", *p[i]);
    return 0;
}

ผลลัพธ์

ค่าใน array:
10  20  30

ตัวอย่างโปรแกรมที่ 2: Array of Pointers to Strings

#include <stdio.h>
#include <stdlib.h>
int main() {
    char *a[5] = {"one", "two", "three", "four", "five"};
    int i;
    printf("ที่อยู่ของ strings:\\n");
    for (i = 0; i < 5; i++)
        printf("%p\\n", (void*)a[i]); // ใช้ %p สำหรับ pointer
    return 0;
}

ผลลัพธ์ตัวอย่าง

ที่อยู่ของ strings:
0x403000
0x403004
0x403008
0x40300e
0x403013

การประยุกต์ใช้

  • Array of strings: char *argv[] ใน main function
  • Jump tables: Array of function pointers
  • Sparse matrices: เก็บเฉพาะ non-zero elements
  • Polymorphism: Array of pointers to base struct

ความแตกต่าง: Array of Pointers vs Pointer to Array

ประเภทการประกาศความหมาย
Array of pointersint *p[5];5 pointers ชี้ int
Pointer to arrayint (*p)[5];1 pointer ชี้ array ขนาด 5 int