การส่งพารามิเตอร์ให้ฟังก์ชัน
มี 2 วิธี: Call by Value (ส่งค่า) และ Call by Reference (ส่งที่อยู่/อ้างอิง)
ตารางเปรียบเทียบ
| ลำดับ | หัวข้อ | Call by Value | Call by Reference |
|---|---|---|---|
| 1 | หลักการ | คัดลอกค่าพารามิเตอร์ไปยังตัวแปรในฟังก์ชัน | คัดลอกที่อยู่ (address) ของพารามิเตอร์ ทั้งสองชี้ที่เดียวกัน |
| 2 | การเปลี่ยนแปลง | เปลี่ยนในฟังก์ชัน ไม่ส่งผลต่อตัวแปรต้นทาง | เปลี่ยนในฟังก์ชัน ส่งผลต่อตัวแปรต้นทาง |
| 3 | ที่อยู่หน่วยความจำ | ต่างกัน | เหมือนกัน |
| 4 | ภาษาที่รองรับ | C, C++, PHP, VB.NET, C# | Java (หลัก), C++ (ด้วย &), C (ด้วย pointer) |
ตัวอย่าง Call by Value (C)
#include <stdio.h>
void swapByValue(int a, int b) {
int t = a; a = b; b = t;
}
int main() {
int n1 = 10, n2 = 20;
swapByValue(n1, n2);
printf("n1: %d, n2: %d\n", n1, n2); // ไม่เปลี่ยน: 10, 20
return 0;
}ผลลัพธ์
n1: 10, n2: 20
ตัวอย่าง Call by Reference (C)
#include <stdio.h>
void swapByReference(int *a, int *b) {
int t = *a; *a = *b; *b = t;
}
int main() {
int n1 = 10, n2 = 20;
swapByReference(&n1, &n2);
printf("n1: %d, n2: %d\n", n1, n2); // เปลี่ยน: 20, 10
return 0;
}ผลลัพธ์
n1: 20, n2: 10