[C++] วิธีการส่งค่า parameter ของ function


การสั่งให้ฟังก์ชันแบบมีพารามิเตอร์ทำงาน จะต้องมีการส่งค่าตามจำนวนและชนิดข้อมูลพารามิเตอร์ที่ตรงกันด้วย การส่งค่ามี 2 แบบ
  1. การส่งค่าแบบปกติ (Pass by value) เป็นการส่งค่าแบบปกติ copy ค่าไปใช้
  2. การส่งค่าแบบอ้างอิง (Pass by Reference) เป็นการส่ง address (ตำแหน่งข้อมูล) เข้าไป ส่งผลให้เกิดการเปลี่ยนแปลงค่าทั้ง 2 ทาง 

1. การส่งค่าแบบปกติ (Pass by Value) 

การส่งค่าให้กับพารามิเตอร์แบบ value เปรียบเสมือนว่า เรา copy ค่าของข้อมูลที่ต้องการส่งออกมาก่อน จากนั้นนำค่า copy ดังกล่าวไปใช้งานในฟังก์ชัน ดังนั้น ค่าต้นทางกับค่าที่ถูกนำไปใช้ภายในฟังก์ชัน จึงเป็นคนละตัวกัน ค่าของ num ถูก copy ไปใช้ในฟังก์ชัน CalculateNumber ค่าของ num ต้นทางจึงไม่ถูกเปลี่ยน

Ex1 Pass by Value

#include 
using namespace std;

void CalculateNumber(int number) 
{
 number = number * 2;
} 

int main(int argc, char** argv)
{ 
 int num = 10;
 
 cout << "num (before) = " << num << endl;
 CalculateNumber(num);
 cout << "num (after) = " << num << endl;
 
 return 0;
} 

ผลลัพธ์

num (before) = 10
num (after) = 10

2. การส่งค่าแบบอ้างอิง (Pass by Reference) 

การส่งค่าให้กับพารามิเตอร์แบบ reference เป็นการส่งตำแหน่งที่อยู่ของตัวแปรหรือตำแหน่งข้อมูลนั้นเข้าไป (เครื่องหมาย * กำกับ ที่ตัวแปร *number ไว้) ดังนั้นการมทำงานในฟังก์ชัน CalculateNumber จึงเป็นการทำงานกับตัวแปรโดยตรง (สังเกตเครื่องหมาย & ที่ &num) ซึ่งค่าของ num ต้นทางจึงถูกเปลี่ยนไปด้วย

Ex2 Pass by Reference
#include <iostream>
using namespace std;

void CalculateNumber(int *number) 
{
 *number = *number * 2;
} 

int main(int argc, char** argv)
{ 
 int num = 10;
 
 cout << "num (before) = " << num << endl;
 CalculateNumber(&num);
 cout << "num (after) = " << num << endl;
 
 return 0;
}

ผลลัพธ์

num (before) = 10
num (after) = 20
Previous
Next Post »