ตัวชี้แบบห้อย
ตัวชี้แบบห้อยคือตัวชี้ที่ชี้ไปยังตำแหน่งหน่วยความจำที่ว่าง (หรือถูกลบ) มีหลายวิธีที่ Pointer ทำหน้าที่เป็นตัวชี้แบบห้อย
เรียกฟังก์ชัน
ตัวชี้ที่ชี้ไปที่ตัวแปรในเครื่องจะห้อยต่องแต่งเมื่อตัวแปรในเครื่องไม่คงที่
int *show(void) {
int n = 76; /* ... */ return &n;
} ผลลัพธ์
Output of this program will be garbage address.
ยกเลิกการจัดสรรหน่วยความจำ
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.
} ตัวชี้เป็นโมฆะ
ตัวชี้เป็นโมฆะคือตัวชี้ที่ไม่เชื่อมโยงกับชนิดข้อมูลใดๆ มันชี้ไปยังตำแหน่งข้อมูลบางส่วนในการจัดเก็บ หมายถึงชี้ไปยังที่อยู่ของตัวแปร เรียกอีกอย่างว่าตัวชี้เอนกประสงค์
มันมีข้อจำกัดบางอย่าง
- เลขคณิตของตัวชี้เป็นไปไม่ได้สำหรับตัวชี้ void เนื่องจากมีขนาดที่เป็นรูปธรรม
- ไม่สามารถใช้เป็นข้อมูลอ้างอิงได้
ตัวอย่าง
#include<stdlib.h>
#include<iostream>
using namespace std;
int main() {
int a = 7;
float b = 7.6;
void *p;
p = &a;
cout<<*( (int*) p)<<endl ;
p = &b;
cout<< *( (float*) p) ;
return 0;
} ผลลัพธ์
7 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 pointer บางส่วนคือ
-
เพื่อเริ่มต้นตัวแปรพอยน์เตอร์เมื่อตัวแปรพอยน์เตอร์นั้นยังไม่ได้กำหนดแอดเดรสหน่วยความจำที่ถูกต้อง
-
หากต้องการส่งตัวชี้ค่าว่างไปยังอาร์กิวเมนต์ของฟังก์ชัน หากเราไม่ต้องการส่งที่อยู่หน่วยความจำที่ถูกต้อง
-
เพื่อตรวจสอบหาค่า null ก่อนเข้าถึงตัวแปรตัวชี้ใด ๆ เพื่อให้เราสามารถดำเนินการจัดการข้อผิดพลาดในรหัสที่เกี่ยวข้องกับตัวชี้เช่น ตัวแปรตัวชี้ dereference เมื่อไม่ใช่ NULL เท่านั้น
ตัวอย่าง
#include <iostream>
using namespace std;
int main() {
int *p= NULL; //initialize the pointer as null.
cout<<"The value of pointer is ";
cout<<p;
return 0;
} ผลลัพธ์
The value of pointer is 0.
ไวลด์พอยน์เตอร์
ไวด์พอยน์เตอร์คือพอยน์เตอร์ที่ชี้ไปยังตำแหน่งหน่วยความจำโดยพลการ (ไม่แม้แต่ NULL)
int main() {
int *ptr; //wild pointer
*ptr = 5;
}