ความหมายของ 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 pointers | int *p[5]; | 5 pointers ชี้ int |
| Pointer to array | int (*p)[5]; | 1 pointer ชี้ array ขนาด 5 int |