โมฆะ* ใน C และ C++ คืออะไร

Mokha Ni C Laea C Khux Xari



C และ C++ เป็นภาษาโปรแกรมสองภาษาที่อาศัยพอยน์เตอร์ในการจัดการหน่วยความจำและการจัดการข้อมูลเป็นอย่างมาก พอยน์เตอร์คือตัวแปรที่เก็บแอดเดรสหน่วยความจำ ซึ่งอนุญาตให้โปรแกรมเข้าถึงและจัดการข้อมูลที่จัดเก็บไว้ในหน่วยความจำ ตัวชี้ชนิดพิเศษชนิดหนึ่งคือ ตัวชี้โมฆะ (โมฆะ*) หรือที่เรียกว่า ตัวชี้ทั่วไป .

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++ และความต้องการการแปลงอย่างชัดเจนเมื่อส่งตัวชี้โมฆะไปยังตัวชี้ประเภทอื่นๆ การพิจารณาอย่างรอบคอบในประเด็นเหล่านี้สามารถนำไปสู่การใช้อย่างมีประสิทธิภาพและประสิทธิผลมากขึ้น ตัวชี้โมฆะ ในการเขียนโปรแกรม