ใน C เราสามารถส่งพารามิเตอร์ได้สองวิธี นี่คือการโทรตามมูลค่าและการโทรตามที่อยู่ ใน C ++ เราสามารถรับเทคนิคอื่นได้ สิ่งนี้เรียกว่าการโทรโดยการอ้างอิง ให้เราดูผลกระทบของสิ่งเหล่านี้และวิธีการทำงาน
อันดับแรกเราจะเห็นการโทรตามมูลค่า ในเทคนิคนี้ พารามิเตอร์จะถูกคัดลอกไปยังอาร์กิวเมนต์ของฟังก์ชัน ดังนั้นหากมีการแก้ไขบางอย่าง จะเป็นการอัปเดตค่าที่คัดลอก ไม่ใช่ค่าจริง
ตัวอย่าง
#include <iostream> using namespace std; void my_swap(int x, int y) { int temp; temp = x; x = y; y = temp; } int main() { int a, b; a = 10; b = 40; cout << "(a,b) = (" << a << ", " << b << ")\n"; my_swap(a, b); cout << "(a,b) = (" << a << ", " << b << ")\n"; }
ผลลัพธ์
(a,b) = (10, 40) (a,b) = (10, 40)
การเรียกตามที่อยู่ทำงานโดยส่งที่อยู่ของตัวแปรเข้าไปในฟังก์ชัน ดังนั้นเมื่อฟังก์ชันอัปเดตค่าที่ชี้โดยที่อยู่นั้น ค่าจริงจะได้รับการอัปเดตโดยอัตโนมัติ
ตัวอย่าง
#include <iostream> using namespace std; void my_swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; } int main() { int a, b; a = 10; b = 40; cout << "(a,b) = (" << a << ", " << b << ")\n"; my_swap(&a, &b); cout << "(a,b) = (" << a << ", " << b << ")\n"; }
ผลลัพธ์
(a,b) = (10, 40) (a,b) = (40, 10)
เช่นเดียวกับการโทรตามที่อยู่ เรากำลังใช้การโทรโดยการอ้างอิง นี่เป็นคุณลักษณะเฉพาะ C ++ เราต้องส่งผ่านตัวแปรอ้างอิงของอาร์กิวเมนต์ ดังนั้นสำหรับการอัปเดต ค่าจริงจะได้รับการอัปเดต เฉพาะที่นิยามฟังก์ชันเท่านั้น เราต้องใส่ &ก่อนชื่อตัวแปร
ตัวอย่าง
#include <iostream> using namespace std; void my_swap(int &x, int &y) { int temp; temp = x; x = y; y = temp; } int main() { int a, b; a = 10; b = 40; cout << "(a,b) = (" << a << ", " << b << ")\n"; my_swap(a, b); cout << "(a,b) = (" << a << ", " << b << ")\n"; }
ผลลัพธ์
(a,b) = (10, 40) (a,b) = (40, 10)