Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ความแตกต่างระหว่าง Call by Value และ Call by Reference

การส่งพารามิเตอร์ให้ฟังก์ชัน

มี 2 วิธี: Call by Value (ส่งค่า) และ Call by Reference (ส่งที่อยู่/อ้างอิง)

ตารางเปรียบเทียบ

ลำดับหัวข้อCall by ValueCall 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