ในภาษา C สามารถส่งผ่านพารามิเตอร์ได้ 2 วิธี ได้แก่ Call by Value (ส่งค่า) และ Call by Address (ส่งที่อยู่) ส่วนใน C++ มีอีก 1 วิธีคือ Call by Reference (ส่งอ้างอิง) มาดูรายละเอียดและการทำงานของแต่ละวิธี
1. Call by Value (ส่งค่า)
ในเทคนิคนี้ พารามิเตอร์จะถูกคัดลอกไปยังอาร์กิวเมนต์ของฟังก์ชัน ดังนั้นหากมีการเปลี่ยนแปลงค่า จะอัปเดตเฉพาะค่าที่คัดลอกมา ไม่ใช่ค่าจริง
ตัวอย่าง
#include <iostream>
using namespace std;
void my_swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
int main() {
int 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)
2. Call by Address (ส่งที่อยู่)
วิธีนี้ทำงานโดยการส่งที่อยู่ของตัวแปรเข้าไปในฟังก์ชัน เมื่อฟังก์ชันอัปเดตค่าที่ชี้โดยที่อยู่นั้น ค่าจริงจะถูกอัปเดตโดยอัตโนมัติ
ตัวอย่าง
#include <iostream>
using namespace std;
void my_swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
int main() {
int 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)
3. Call by Reference (ส่งอ้างอิง) - เฉพาะ C++
คล้ายกับ Call by Address แต่ใช้ตัวแปรอ้างอิง (reference variable) แทน ต้องใส่ & หน้าชื่อตัวแปรในการกำหนดฟังก์ชันเท่านั้น
ตัวอย่าง
#include <iostream>
using namespace std;
void my_swap(int &x, int &y) {
int temp = x;
x = y;
y = temp;
}
int main() {
int 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)