ตัวชี้แบบห้อย
ตัวชี้แบบห้อยคือตัวชี้ที่ชี้ไปยังตำแหน่งหน่วยความจำที่ว่าง (หรือถูกลบ) มีหลายวิธีที่ Pointer ทำหน้าที่เป็นตัวชี้แบบห้อย
เรียกฟังก์ชัน
ตัวชี้ที่ชี้ไปที่ตัวแปรในเครื่องจะห้อยต่องแต่งเมื่อตัวแปรในเครื่องไม่คงที่
int *show(void) { int n = 76; /* ... */ return &n; }
ผลลัพธ์
Output of this program will be garbage address.
ยกเลิกการจัดสรรหน่วยความจำ
#include <stdlib.h> #include <stdio.h> int main() { float *p = (float *)malloc(sizeof(float)); //dynamic memory allocation. free(p); //after calling free() p becomes a dangling pointer p = NULL; //now p no more a dangling pointer. }
ตัวแปรอยู่นอกขอบเขต
int main() { int *p //some code// { int c; p=&c; } //some code// //p is dangling pointer here. }
ตัวชี้เป็นโมฆะ
ตัวชี้เป็นโมฆะใน C เป็นตัวชี้ที่ไม่เชื่อมโยงกับประเภทข้อมูลใดๆ มันชี้ไปยังตำแหน่งข้อมูลบางส่วนในการจัดเก็บหมายถึงชี้ไปยังที่อยู่ของตัวแปร เรียกอีกอย่างว่าตัวชี้เอนกประสงค์
มันมีข้อจำกัดบางอย่าง
เลขคณิตของตัวชี้เป็นไปไม่ได้สำหรับตัวชี้เป็นโมฆะเนื่องจากขนาดที่เป็นรูปธรรม
ไม่สามารถใช้เป็นการละเลยได้
นี่คือตัวอย่างง่ายๆ
#include<stdlib.h> int main() { int a = 7; float b = 7.6; void *p; p = &a; printf("Integer variable is = %d", *( (int*) p) ); p = &b; printf("\nFloat variable is = %f", *( (float*) p) ); return 0; }
ผลลัพธ์
Integer variable is = 7 Float variable is = 7.600000
อัลกอริทึม
Begin Initialize a variable a with integer value and variable b with float value. Declare a void pointer p. (int*)p = type casting of void. p = &b mean void pointer p is now float. (float*)p = type casting of void. Print the value. End.
ตัวชี้ค่า Null
ตัวชี้ค่า Null เป็นตัวชี้ที่ไม่ชี้อะไร การใช้ตัวชี้ค่า null บางอย่างคือ:
เพื่อเริ่มต้นตัวแปรพอยน์เตอร์เมื่อตัวแปรพอยน์เตอร์นั้นยังไม่ได้กำหนดแอดเดรสหน่วยความจำที่ถูกต้อง
หากต้องการส่งตัวชี้ค่าว่างไปยังอาร์กิวเมนต์ของฟังก์ชัน หากเราไม่ต้องการส่งที่อยู่หน่วยความจำที่ถูกต้อง
เพื่อตรวจสอบค่า null pointer ก่อนเข้าถึงตัวแปร pointer เพื่อให้เราสามารถดำเนินการจัดการข้อผิดพลาดในรหัสที่เกี่ยวข้องกับตัวชี้เช่น ตัวแปรตัวชี้ dereference เมื่อไม่ใช่ NULL เท่านั้น
ตัวอย่าง
#include<iostream> #include <stdio.h> int main() { int *p= NULL;//initialize the pointer as null. printf("The value of pointer is %u",p); return 0; }
ผลลัพธ์
The value of pointer is 0.
ไวลด์พอยน์เตอร์
ไวด์พอยน์เตอร์คือพอยน์เตอร์ที่ชี้ไปยังตำแหน่งหน่วยความจำโดยพลการ (ไม่แม้แต่ NULL)
int main() { int *ptr; //wild pointer *ptr = 5; }