C++ โทรตามที่อยู่และโทรโดยอ้างอิง

C Call Address



C ++ เป็นภาษาโปรแกรมทั่วไปที่ยืดหยุ่น มันถูกสร้างขึ้นโดย บียาร์น สตรูสทรัพ, นักวิทยาศาสตร์คอมพิวเตอร์ชาวเดนมาร์ก ย้อนกลับไปในปี 1985 C++ รองรับวิธีการส่งผ่านสามพารามิเตอร์ เช่น การเรียกตามค่า การเรียกตามที่อยู่ และการโทรโดยการอ้างอิง ในบทความนี้ เราจะมาพูดถึงเรื่อง call by address และ call by reference mechanism

ฟังก์ชั่นคืออะไร?

ก่อนที่เราจะเข้าสู่หัวข้อจริง เราต้องเข้าใจว่าฟังก์ชันใน C++ คืออะไร หลายๆ ท่านอาจจะคุ้นเคยกับฟังก์ชั่นต่างๆ อยู่แล้ว







ฟังก์ชันนั้นเป็นโค้ดที่สามารถใช้ทำงานบางอย่างได้ ฟังก์ชันส่วนใหญ่จะใช้เพื่อลดการซ้ำซ้อนของโค้ดในโปรแกรม C++ รับอินพุตเป็นพารามิเตอร์และส่งกลับเอาต์พุตเป็นค่าส่งคืน หากเรากำหนดฟังก์ชันเพียงครั้งเดียว เราสามารถเรียก/ใช้งานได้หลายครั้งในส่วนหลังของโปรแกรม ด้วยวิธีนี้ เราบันทึกโค้ดที่ซ้ำกันจำนวนมากในโปรแกรม



ทุกโปรแกรม C++ จะต้องมีฟังก์ชั่น main() ฟังก์ชัน main() คือจุดเริ่มต้นสำหรับโปรแกรม C++ นอกเหนือจากฟังก์ชัน main() แล้ว โปรแกรมเมอร์สามารถกำหนดฟังก์ชันได้มากเท่าที่ต้องการ



นี่คือไวยากรณ์ของการกำหนดฟังก์ชัน:





Return_type Function_Name(อินพุตพารามิเตอร์ List)

ฟังก์ชันใน C++ สามารถรับพารามิเตอร์อินพุตได้ตั้งแต่ 0 ตัวขึ้นไป ในขณะที่สามารถคืนค่าส่งคืนได้เพียงค่าเดียว

ที่อยู่คืออะไร?

ตัวแปรในภาษา C++ มี 2 ประเภท (คล้ายกับภาษา C) – Data Variable และ Address Variable ตัวแปรที่อยู่ใช้เพื่อเก็บที่อยู่ของตัวแปรข้อมูลอื่น ตัวอย่างเช่น ลองพิจารณาข้อมูลโค้ดต่อไปนี้:



intผม= 100;
int *ptr= &ผม;

ในที่นี้ คำสั่งแรกบอกเราว่าตัวแปร i เป็นตัวแปรข้อมูล และมันกำลังเก็บค่า 100 ในคำสั่งที่สอง เรากำลังประกาศตัวแปรตัวชี้ นั่นคือ ptr และเริ่มต้นมันด้วยที่อยู่ของตัวแปร i

อ้างอิงคืออะไร?

ข้อมูลอ้างอิงเป็นคุณลักษณะที่มีประสิทธิภาพอีกอย่างหนึ่งของภาษา C++ ลองพิจารณาข้อมูลโค้ดต่อไปนี้:

intถึง= 200;
int &NS=ถึง;

ในตัวอย่างนี้ เราได้ประกาศจำนวนเต็ม นั่นคือ a แล้วจึงประกาศตัวแปรอ้างอิง r ซึ่งเริ่มต้นด้วยค่าของ a ดังนั้น ตัวแปรอ้างอิงจึงเป็นเพียงนามแฝงของตัวแปรอื่น

วิธีการส่งผ่านพารามิเตอร์:

วิธีการส่งพารามิเตอร์ในภาษา C++ มีสามประเภท:

  1. โทรตามมูลค่า / ผ่านตามมูลค่า
  2. โทรตามที่อยู่ / ผ่านตามที่อยู่
  3. โทรโดยอ้างอิง / ผ่านโดยอ้างอิง

ในบทความนี้ เรากำลังพูดถึง – Call by address และ Call by reference

Call By Address / Pass by address คืออะไร?

ในกรณีของวิธี Call by address / Pass by address อาร์กิวเมนต์ของฟังก์ชันจะถูกส่งผ่านเป็น address ฟังก์ชันผู้โทรส่งที่อยู่ของพารามิเตอร์ ตัวแปรตัวชี้ถูกใช้ในการกำหนดฟังก์ชัน ด้วยความช่วยเหลือของวิธีการโทรตามที่อยู่ ฟังก์ชันสามารถเข้าถึงพารามิเตอร์จริงและแก้ไขได้ เราจะเห็นตัวอย่างของวิธีการโทรตามที่อยู่ในส่วนท้ายของบทความนี้

Call By Reference / Pass by Reference คืออะไร?

ในวิธี Call by reference / Pass by reference พารามิเตอร์ของฟังก์ชันจะถูกส่งผ่านเป็นข้อมูลอ้างอิง ภายในนิยามฟังก์ชัน พารามิเตอร์จริงสามารถเข้าถึงได้โดยใช้ตัวแปรอ้างอิง

ตัวอย่าง:

ตอนนี้ เนื่องจากเราเข้าใจแนวคิดของวิธีการส่งผ่านพารามิเตอร์ เราจะเห็นโปรแกรมตัวอย่างหลายโปรแกรมเพื่อทำความเข้าใจกลไกการส่งพารามิเตอร์ใน C++:

  1. ตัวอย่าง-1 – โทรตามที่อยู่ (1)
  2. ตัวอย่างที่ 2 – โทรตามที่อยู่ (2)
  3. ตัวอย่างที่ 3 – โทรโดยอ้างอิง (1)
  4. ตัวอย่างที่ 4 – โทรโดยอ้างอิง (2)

ตัวอย่างสองตัวอย่างแรกมีไว้เพื่ออธิบายว่าวิธีการโทรตามที่อยู่ทำงานอย่างไรใน C ++ สองตัวอย่างสุดท้ายคือการอธิบายแนวคิด Call by reference

ตัวอย่าง-1 – โทรตามที่อยู่ (1)

ในตัวอย่างนี้ เราจะสาธิตกลไกการโทรตามที่อยู่ จากฟังก์ชัน main() เรากำลังเรียกใช้ฟังก์ชัน hello() และส่งที่อยู่ของ var ในการกำหนดฟังก์ชัน เราได้รับที่อยู่ของ var ในตัวแปรพอยน์เตอร์ นั่นคือ p ภายในฟังก์ชันสวัสดี ค่าของ var จะถูกเปลี่ยนเป็น 200 โดยใช้ตัวชี้ ดังนั้น ค่าของ var จะเปลี่ยนเป็น 200 ภายในฟังก์ชัน main() หลังจากการเรียกใช้ฟังก์ชัน hello()

#รวม
โดยใช้ เนมสเปซชั่วโมง;

โมฆะสวัสดี(int *NS)
{
ค่าใช้จ่าย <<endl<< 'ภายในสวัสดี () ฟังก์ชั่น: ' <<endl;
ค่าใช้จ่าย << 'ค่าของ *p = ' << *NS<<endl;
*NS= 200;
ค่าใช้จ่าย << 'ค่าของ *p = ' << *NS<<endl;
ค่าใช้จ่าย << 'ออกจากฟังก์ชันสวัสดี ()' <<endl;
}

intหลัก()
{
intที่ไหน= 100;
ค่าใช้จ่าย << 'ค่าของ var ภายในฟังก์ชัน main() = ' <<ที่ไหน<<endl;

สวัสดี(&ที่ไหน);

ค่าใช้จ่าย <<endl<< 'ค่าของ var ภายในฟังก์ชัน main() = ' <<ที่ไหน<<endl;

กลับ 0;
}

ตัวอย่างที่ 2 – โทรตามที่อยู่ (2)

นี่เป็นอีกตัวอย่างหนึ่งของวิธีการโทรตามที่อยู่ ในตัวอย่างนี้ เราจะอธิบายวิธีการใช้ call by address method เพื่อแก้ปัญหาในชีวิตจริง ตัวอย่างเช่น เราต้องการเขียนฟังก์ชันเพื่อสลับสองตัวแปร หากเราใช้กลไกการเรียกตามค่าเพื่อสลับสองตัวแปร ตัวแปรจริงจะไม่ถูกสลับในฟังก์ชันผู้เรียก วิธีการโทรตามที่อยู่สามารถใช้ในสถานการณ์ดังกล่าวได้ ในตัวอย่างนี้ เรากำลังส่งที่อยู่ของทั้ง var_1 (&var_1) และ var_2 (&var_2) ไปยังฟังก์ชัน mySwap() ภายในฟังก์ชัน mySwap() เรากำลังสลับค่าของตัวแปรทั้งสองนี้ด้วยความช่วยเหลือของพอยน์เตอร์ ดังที่คุณเห็นในผลลัพธ์ด้านล่าง ค่าจริงของตัวแปรเหล่านี้จะถูกสลับในฟังก์ชัน main() หลังจากดำเนินการฟังก์ชัน mySwap()

#รวม
โดยใช้ เนมสเปซชั่วโมง;

โมฆะmySwap(int *vptr_1,int *vptr_2)
{
inttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

intหลัก()
{
intvar_1= 100;
intvar_2= 300;

ค่าใช้จ่าย << 'ก่อนที่จะเรียกใช้ฟังก์ชัน mySwap() ค่าของ var_1 : ' <<var_1<<endl;
ค่าใช้จ่าย << 'ก่อนที่จะเรียกใช้ฟังก์ชัน mySwap() ค่าของ var_2 : ' <<var_2<<endl<<endl;

ค่าใช้จ่าย << 'การเรียกฟังก์ชัน mySwap () - โทรตามที่อยู่' <<endl<<endl;
mySwap(&var_1,&var_2);

ค่าใช้จ่าย << 'หลังจากเรียกใช้ฟังก์ชัน mySwap() ค่าของ var_1 : ' <<var_1<<endl;
ค่าใช้จ่าย << 'หลังจากเรียกใช้ฟังก์ชัน mySwap() แล้ว ค่าของ var_2 : ' <<var_2<<endl;

กลับ 0;
}

ตัวอย่างที่ 3 – โทรโดยอ้างอิง (1)

ในตัวอย่างนี้ เราจะสาธิตวิธีการทำงานของการโทรโดยการอ้างอิงใน C++ ในนิยามฟังก์ชัน hello() ค่าที่ได้รับเป็นตัวแปรอ้างอิง (&p) ด้วยความช่วยเหลือของตัวแปรอ้างอิง (เช่น p) เราสามารถเปลี่ยนค่าของพารามิเตอร์จริง (var) ภายในฟังก์ชัน main() ได้

#รวม
โดยใช้ เนมสเปซชั่วโมง;

โมฆะสวัสดี(int &NS)
{
ค่าใช้จ่าย <<endl<< 'ภายในสวัสดี () ฟังก์ชั่น: ' <<endl;
ค่าใช้จ่าย << 'ค่าของ p = ' <<NS<<endl;
NS= 200;
ค่าใช้จ่าย << 'ค่าของ p = ' <<NS<<endl;
ค่าใช้จ่าย << 'ออกจากฟังก์ชันสวัสดี ()' <<endl;
}

intหลัก()
{
intที่ไหน= 100;
ค่าใช้จ่าย << 'ค่าของ var ภายในฟังก์ชัน main() = ' <<ที่ไหน<<endl;

สวัสดี(ที่ไหน);

ค่าใช้จ่าย <<endl<< 'ค่าของ var ภายในฟังก์ชัน main() = ' <<ที่ไหน<<endl;

กลับ 0;
}

ตัวอย่างที่ 4 – โทรโดยการอ้างอิง(2)

นี่เป็นอีกตัวอย่างหนึ่งของการโทรโดยอ้างอิง ในตัวอย่างนี้ เราจะสาธิตวิธีการทำงานของ call by reference ใน C++ โดยใช้ตัวอย่างในโลกแห่งความเป็นจริง ฟังก์ชัน mySwap() ถูกเรียกจากฟังก์ชัน main() ด้วยพารามิเตอร์ต่อไปนี้ – var_1 และ var_2 ภายในฟังก์ชัน mySwap() เราได้รับพารามิเตอร์เป็นตัวแปรอ้างอิง

#รวม
โดยใช้ เนมสเปซชั่วโมง;

โมฆะmySwap(int &vref_1,int &vref_2)
{
inttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

intหลัก()
{
intvar_1= 100;
intvar_2= 300;

ค่าใช้จ่าย << 'ก่อนที่จะเรียกใช้ฟังก์ชัน mySwap() ค่าของ var_1 : ' <<var_1<<endl;
ค่าใช้จ่าย << 'ก่อนที่จะเรียกใช้ฟังก์ชัน mySwap() ค่าของ var_2 : ' <<var_2<<endl<<endl;

ค่าใช้จ่าย << 'การเรียกฟังก์ชัน mySwap () - โทรโดยการอ้างอิง' <<endl<<endl;
mySwap(var_1, var_2);

ค่าใช้จ่าย << 'หลังจากเรียกใช้ฟังก์ชัน mySwap() ค่าของ var_1 : ' <<var_1<<endl;
ค่าใช้จ่าย << 'หลังจากเรียกใช้ฟังก์ชัน mySwap() แล้ว ค่าของ var_2 : ' <<var_2<<endl;

กลับ 0;
}

บทสรุป

การทำความเข้าใจวิธีการส่งผ่านพารามิเตอร์ใน ค ++ เป็นสิ่งสำคัญมาก ภาษาการเขียนโปรแกรม C รองรับ Call by value และ Call by address เท่านั้น แต่ C++ รองรับการโทรโดยอ้างอิงพร้อมกับกลไกสองอย่างก่อนหน้านี้ ในบทความนี้ เราได้เห็นตัวอย่างการทำงานหลายอย่างเพื่อทำความเข้าใจแนวคิดของการโทรตามที่อยู่และการโทรโดยการอ้างอิง การโทรตามที่อยู่เป็นวิธีที่มีประสิทธิภาพและเป็นที่นิยมในแอปพลิเคชันโดเมนแบบฝัง