Void Pointer (โมฆะ*) คืออะไร?
ตัวชี้โมฆะหรือที่เรียกว่าพอยน์เตอร์ทั่วไปคือพอยน์เตอร์ที่ไม่เกี่ยวข้องกับประเภทข้อมูลใด ๆ ทำให้เหมาะสำหรับการชี้ไปยังข้อมูลประเภทใดก็ได้ กล่าวอีกนัยหนึ่ง ก ตัวชี้โมฆะ สามารถชี้ไปที่จำนวนเต็ม อักขระ สตริง หรือชนิดข้อมูลอื่นๆ ความยืดหยุ่นนี้ทำให้ตัวชี้โมฆะเป็นเครื่องมือที่มีประสิทธิภาพในการเขียนโปรแกรม C และ C++
การประกาศตัวชี้โมฆะใน C และ C ++
ใน C และ C++, ตัวชี้โมฆะ ถูกประกาศผ่านไวยากรณ์ต่อไปนี้:
เป็นโมฆะ * พีทีอาร์ ;
การใช้ตัวชี้โมฆะใน C และ C ++
โมฆะพอยน์เตอร์ ใน C ส่วนใหญ่จะใช้เมื่อชนิดข้อมูลของตัวแปรไม่เป็นที่รู้จักหรือสามารถเปลี่ยนแปลงได้ในขณะรันไทม์ ช่วยให้มีวิธีทั่วไปในการจัดเก็บและจัดการข้อมูลโดยไม่จำเป็นต้องทราบประเภทข้อมูลเฉพาะ ซึ่งจะเป็นประโยชน์อย่างยิ่งเมื่อต้องจัดการกับฟังก์ชันหรือโครงสร้างข้อมูลที่สามารถจัดการข้อมูลประเภทต่างๆ ได้
การใช้งานทั่วไปอย่างหนึ่งของ ตัวชี้โมฆะ อยู่ในฟังก์ชันการจัดสรรหน่วยความจำ เช่น มัลลอค() ซึ่งจะส่งคืนตัวชี้โมฆะไปยังบล็อกของหน่วยความจำที่สามารถใช้เพื่อเก็บข้อมูลประเภทใดก็ได้ จากนั้นโปรแกรมเมอร์สามารถโยนตัวชี้โมฆะไปยังประเภทข้อมูลที่เหมาะสมเพื่อเข้าถึงและจัดการข้อมูลที่จัดเก็บไว้ในบล็อกหน่วยความจำที่จัดสรร
การใช้ตัวชี้โมฆะใน C อื่นเข้ามา ตัวชี้ฟังก์ชัน ซึ่งเป็นตัวแปรที่เก็บที่อยู่หน่วยความจำของฟังก์ชัน ตัวชี้โมฆะสามารถใช้เพื่อจัดเก็บที่อยู่หน่วยความจำของฟังก์ชันใดๆ โดยไม่คำนึงถึงประเภทการส่งคืนหรือรายการพารามิเตอร์ ช่วยให้มีความยืดหยุ่นมากขึ้นในการใช้งานตัวชี้ฟังก์ชัน
การใช้ ตัวชี้โมฆะ ใน C++ เกือบจะคล้ายกัน แต่สามารถใช้เพื่อสร้างอินเทอร์เฟซทั่วไปสำหรับออบเจกต์ของคลาสต่างๆ ซึ่งมักทำได้โดยการใช้ฟังก์ชันเสมือน ซึ่งช่วยให้วัตถุของคลาสต่างๆ ได้รับการปฏิบัติอย่างเท่าเทียมกัน นอกจากนี้ C++ ยังมีการตรวจสอบประเภทที่เข้มงวดกว่า C ซึ่งหมายความว่าใช้ ตัวชี้โมฆะ ไม่ถูกต้องอาจส่งผลให้เกิดข้อผิดพลาดและจุดบกพร่องมากขึ้น
ข้อควรพิจารณาขณะใช้ Void Pointers ใน C และ C++
ต่อไปนี้เป็นจุดที่คุณควรพิจารณาขณะใช้งาน ตัวชี้โมฆะ ใน C และ C++
1: ใน C, โมฆะ* สามารถใช้เป็นค่าส่งคืนและพารามิเตอร์ของฟังก์ชัน แต่ใน C++ คุณต้องมีตัวชี้ชนิดข้อมูลเฉพาะ
ตัวอย่างเช่น:
ใน C รหัสจะได้รับด้านล่าง:
#รวม#รวม
เป็นโมฆะ * add_numbers ( นานาชาติ ก , นานาชาติ ข ) {
นานาชาติ * ผลลัพธ์ = มัลลอค ( ขนาดของ ( นานาชาติ ) ) ;
* ผลลัพธ์ = ก + ข ;
กลับ ( เป็นโมฆะ * ) ผลลัพธ์ ;
}
เป็นโมฆะ พิมพ์_ผลลัพธ์ ( เป็นโมฆะ * ผลลัพธ์ ) {
นานาชาติ * พีทีอาร์ = ( นานาชาติ * ) ผลลัพธ์ ;
พิมพ์ฉ ( 'ผลลัพธ์คือ: %d \n ' , * พีทีอาร์ ) ;
ฟรี ( พีทีอาร์ ) ;
}
นานาชาติ หลัก ( ) {
นานาชาติ หมายเลข 1 = 5 , หมายเลข 2 = 7 ;
เป็นโมฆะ * ผลลัพธ์ = add_numbers ( หมายเลข 1 , หมายเลข 2 ) ;
พิมพ์_ผลลัพธ์ ( ผลลัพธ์ ) ;
กลับ 0 ;
}
รหัสข้างต้นกำหนดฟังก์ชัน add_numbers() ที่ส่งคืน a โมฆะ* ตัวชี้ไปยังผลลัพธ์ของการบวกจำนวนเต็มสองตัวที่ส่งผ่านเป็นอาร์กิวเมนต์ ฟังก์ชั่น print_result() ใช้เวลา โมฆะ * ตัวชี้ และพิมพ์ผลลัพธ์ ในฟังก์ชัน main() เราเรียกใช้ add_numbers() และผ่านผลลัพธ์ โมฆะ * ตัวชี้ ถึง print_result() สำหรับการพิมพ์
ใน C++ จำเป็นต้องมีประเภทข้อมูลเฉพาะ
#รวมถึงใช้เนมสเปซมาตรฐาน ;
เป็นโมฆะ พิมพ์Int ( นานาชาติ * ในหนึ่ง ) {
ศาล << 'จำนวนเต็มคือ: ' << * ในหนึ่ง << จบ ;
}
นานาชาติ หลัก ( ) {
นานาชาติ x = 10 ;
นานาชาติ * พีทีอาร์ = & x ;
พิมพ์Int ( พีทีอาร์ ) ;
กลับ 0 ;
}
2: ใน C คุณสามารถแปลงตัวชี้โมฆะเป็นตัวชี้ประเภทอื่นได้ การแปลงโดยปริยาย แต่ใน C ++ คุณต้องใช้ การแปลงอย่างชัดเจน เพื่อแปลงไฟล์ ตัวชี้โมฆะ ไปยังพอยน์เตอร์ประเภทอื่นๆ
นี่คือตัวอย่างโค้ดอย่างง่ายสำหรับทั้ง C และ C++ เพื่อแสดงความแตกต่างระหว่าง โดยนัย และ การแปลงอย่างชัดเจน ของ ตัวชี้โมฆะ ไปยังพอยน์เตอร์ประเภทอื่นๆ:
ใน C จะใช้รหัสต่อไปนี้:
#รวมเป็นโมฆะ พิมพ์ชาร์ ( เป็นโมฆะ * ช ) {
ถ่าน ค = * ( ถ่าน * ) ช ;
พิมพ์ฉ ( '%ค \n ' , ค ) ;
}
นานาชาติ หลัก ( ) {
ถ่าน ค = 'เอ' ;
เป็นโมฆะ * พีทีอาร์ = & ค ;
พิมพ์ชาร์ ( พีทีอาร์ ) ;
กลับ 0 ;
}
รหัสข้างต้นกำหนดฟังก์ชัน พิมพ์ชาร์ ที่ใช้ตัวชี้โมฆะเป็นพารามิเตอร์และพิมพ์อักขระที่เก็บไว้ที่ตำแหน่งหน่วยความจำนั้น ในฟังก์ชันหลัก ตัวแปร char ค ถูกกำหนดและที่อยู่ของมันถูกเก็บไว้ในตัวชี้โมฆะ พีทีอาร์ เดอะ พิมพ์ชาร์ จากนั้นเรียกใช้ฟังก์ชันด้วย ตัวชี้โมฆะ 'ptr' เป็นข้อโต้แย้ง ตัวชี้โมฆะถูกแปลงอย่างชัดเจนเป็นตัวชี้ถ่านใน “พิมพ์ชาร์” ฟังก์ชันเข้าถึงและพิมพ์ค่าที่เก็บไว้ 'ค' .
ใน C ++ รหัสจะได้รับด้านล่าง:
#รวมถึงเป็นโมฆะ พิมพ์Int ( เป็นโมฆะ * ในหนึ่ง ) {
นานาชาติ * พีทีอาร์ = static_cast < นานาชาติ *> ( ในหนึ่ง ) ;
มาตรฐาน :: ศาล << * พีทีอาร์ << มาตรฐาน :: จบ ;
}
นานาชาติ หลัก ( ) {
นานาชาติ x = 10 ;
เป็นโมฆะ * พีทีอาร์ = & x ;
พิมพ์Int ( พีทีอาร์ ) ;
กลับ 0 ;
}
รหัสข้างต้นกำหนดฟังก์ชัน พิมพ์Int ที่ใช้ตัวชี้ void num เป็นพารามิเตอร์และส่งไปยังตัวชี้จำนวนเต็มโดยใช้ ตัวดำเนินการ static_cast . จากนั้น ฟังก์ชันจะพิมพ์ค่าของจำนวนเต็มที่ชี้ไปโดยตัวชี้แบบคาสต์ ในฟังก์ชันหลัก ตัวแปรจำนวนเต็ม x ถูกกำหนดและแอดเดรสของมันจะถูกเก็บไว้ใน a โมฆะตัวชี้ ptr ซึ่งจะถูกส่งต่อไปยัง พิมพ์Int การทำงาน. ผลลัพธ์ของโปรแกรมคือค่า x ซึ่งเท่ากับ 10
ความคิดสุดท้าย
เดอะ เป็นโมฆะ พอยน์เตอร์ใน C และ C++ เป็นวิธีที่มีประสิทธิภาพในการจัดการข้อมูลโดยไม่จำเป็นต้องรู้ประเภทข้อมูลเฉพาะ ซึ่งมีประโยชน์สำหรับการจัดสรรหน่วยความจำและพอยน์เตอร์ของฟังก์ชัน เช่นเดียวกับการสร้างอินเทอร์เฟซทั่วไปสำหรับออบเจกต์ของคลาสต่างๆ ใน C++ อย่างไรก็ตาม สิ่งสำคัญคือต้องพิจารณาความแตกต่างระหว่าง C และ C++ ในการใช้งาน ตัวชี้โมฆะ เช่น ความต้องการประเภทข้อมูลเฉพาะใน C++ และความต้องการการแปลงอย่างชัดเจนเมื่อส่งตัวชี้โมฆะไปยังตัวชี้ประเภทอื่นๆ การพิจารณาอย่างรอบคอบในประเด็นเหล่านี้สามารถนำไปสู่การใช้อย่างมีประสิทธิภาพและประสิทธิผลมากขึ้น ตัวชี้โมฆะ ในการเขียนโปรแกรม