ใน C ++ เราสามารถส่งอาร์กิวเมนต์ไปยังฟังก์ชันได้หลายวิธี วิธีต่างๆ เหล่านี้คือ −
- โทรตามมูลค่า
- โทรโดยอ้างอิง
- โทรตามที่อยู่
บางครั้งการโทรตามที่อยู่จะเรียกว่าการโทรโดยการอ้างอิง แต่จะแตกต่างกันใน C ++ Incall by address เราใช้ตัวแปรพอยน์เตอร์เพื่อส่งที่อยู่หน่วยความจำที่แน่นอน แต่ในการเรียกโดยการอ้างอิง เราจะส่งตัวแปรอ้างอิง (นามแฝงของตัวแปรนั้น) คุณลักษณะนี้ไม่มีอยู่ใน C เราต้องส่งตัวชี้เพื่อให้ได้เอฟเฟกต์นั้น
ในส่วนนี้ เราจะมาดูกันว่าข้อดีของการโทรโดยอ้างอิงผ่านการโทรตามมูลค่ามีข้อดีอย่างไร และจะใช้ที่ใด
โทรตามมูลค่า
ในการเรียกตามค่า ค่าจริงที่ส่งผ่านเป็นอาร์กิวเมนต์จะไม่เปลี่ยนแปลงหลังจากดำเนินการบางอย่างกับค่านั้น เมื่อใช้การเรียกตามค่า มันจะสร้างสำเนาของตัวแปรนั้นลงในส่วนสแต็กในหน่วยความจำ เมื่อค่ามีการเปลี่ยนแปลง ค่าของสำเนานั้นจะเปลี่ยน ค่าจริงยังคงเหมือนเดิม
โค้ดตัวอย่าง
#include<iostream> using namespace std; void my_function(int x) { x = 50; cout << "Value of x from my_function: " << x << endl; } main() { int x = 10; my_function(x); cout << "Value of x from main function: " << x; }
ผลลัพธ์
Value of x from my_function: 50 Value of x from main function: 10
โทรโดยอ้างอิง
ในการเรียกโดยการอ้างอิง ค่าจริงที่ส่งผ่านเมื่ออาร์กิวเมนต์เปลี่ยนไปหลังจากดำเนินการบางอย่างกับค่านั้น เมื่อใช้การเรียกโดยการอ้างอิง มันจะสร้างสำเนาของการอ้างอิงของตัวแปรนั้นลงในส่วนสแต็กในหน่วยความจำ คือใช้การอ้างอิงเพื่อรับค่า ดังนั้นเมื่อค่าถูกเปลี่ยนโดยใช้ข้อมูลอ้างอิง ค่าของตัวแปรจริงจะเปลี่ยนไปตาม
โค้ดตัวอย่าง
#include<iostream> using namespace std; void my_function(int &x) { x = 50; cout << "Value of x from my_function: " << x << endl; } main() { int x = 10; my_function(x); cout << "Value of x from main function: " << x; }
ผลลัพธ์
Value of x from my_function: 50 Value of x from main function: 50
จะใช้การโทรโดยการอ้างอิงได้ที่ไหน
-
การเรียกโดยการอ้างอิงส่วนใหญ่จะใช้เมื่อเราต้องการเปลี่ยนค่าของอาร์กิวเมนต์ที่ส่งผ่านไปยังฟังก์ชันผู้เรียกใช้
-
ฟังก์ชันหนึ่งสามารถคืนค่าได้เพียงค่าเดียวเท่านั้น เมื่อเราต้องการค่ามากกว่าหนึ่งค่าจากฟังก์ชัน เราก็สามารถส่งผ่านเป็นอาร์กิวเมนต์เอาต์พุตได้ในลักษณะนี้