การสั่งให้ฟังก์ชันแบบมีพารามิเตอร์ทำงาน จะต้องมีการส่งค่าตามจำนวนและชนิดข้อมูลพารามิเตอร์ที่ตรงกันด้วย การส่งค่ามี 2 แบบ
- การส่งค่าแบบปกติ (Pass by value) เป็นการส่งค่าแบบปกติ copy ค่าไปใช้
- การส่งค่าแบบอ้างอิง (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
Ex2 Pass by Reference
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
Sign up here with your email
ConversionConversion EmoticonEmoticon