ความแตกต่างหลัก
ความแตกต่างระหว่าง NULL Pointer และ Void Pointer คือ NULL Pointer เป็น ค่า ส่วน Void Pointer เป็น ชนิดข้อมูล (type)
NULL Pointer
NULL Pointer หมายถึง Pointer ที่ไม่ชี้ไปที่ที่อยู่หน่วยความจำใดๆ หากไม่มีที่อยู่ให้ชี้ ให้กำหนดค่าเป็น NULL
ทุกชนิดของ Pointer เช่น int *, char * ล้วนมีค่า NULL Pointer
รูปแบบไวยากรณ์:
<ชนิดข้อมูล> *<ชื่อตัวแปร> = NULL;
ตัวอย่าง:
int *p = NULL;
char *p = '\0';
ตัวอย่างโปรแกรม NULL Pointer
#include <stdio.h>
int main() {
printf("TutorialPoint C Programming");
int *p = NULL; // ptr เป็น NULL pointer
printf("\n The value of pointer is: %x ", p);
return 0;
}
ผลลัพธ์:
TutorialPoint C Programming
The value of pointer is: 0
Void Pointer
Void Pointer คือ Pointer ที่ไม่มีชนิดข้อมูลผูกมาด้วย เรียกอีกอย่างว่า General Purpose Pointer สามารถเก็บที่อยู่ของชนิดข้อมูลได้ทุกชนิด
รูปแบบไวยากรณ์:
void *<ชื่อตัวแปร>;
ตัวอย่าง:
void *p;
int a;
char c;
p = &a; // p กลายเป็น integer pointer
p = &c; // p กลายเป็น character pointer
ตัวอย่างโปรแกรม Void Pointer
#include <stdio.h>
int main() {
int a = 10;
void *ptr = &a;
printf("%d", *(int *)ptr); // ต้อง type cast ก่อน dereference
return 0;
}
ผลลัพธ์:
10
สรุปความแตกต่าง
| คุณสมบัติ | NULL Pointer | Void Pointer |
|---|---|---|
| ลักษณะ | เป็นค่า (Value) | เป็นชนิดข้อมูล (Type) |
| วัตถุประสงค์ | ระบุว่าไม่ชี้ที่ไหน | ชี้ได้ทุกชนิดข้อมูล |
| การ Dereference | ไม่ได้ (ทำให้เกิด Error) | ได้ แต่ต้อง Type Cast ก่อน |