ใน 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)