ค้นหาบล็อกนี้

วันศุกร์ที่ 23 เมษายน พ.ศ. 2553

ตัวแปรแบบอ้างอิง (Reference Variable)

เคยสงสัยอยู่เหมือนกันว่า เวลาตอนส่งฟังก์ชันแบบ pass by reference ทำไมต้องมี & เช่น

void test (int &x){
x+=10;
}

int a=20;
test(a)


เนื่องจาก c++ มีการกำหนดรูปแบบ ตัวแปรแบบอ้างอิง(reference variable)
กล่าวคือ
int a=10;
int &b=a;
การกำหนดรูปแบบ ตัวแปรอ้างอิงนี้ จะกระทำเมื่อตัวแปรนั้นถูกนิยามมาแล้ว(ชื่อก็บอกอยู่ว่าอ้างอิง) ในการกำหนดค่าเริ่มต้น จึงไม่สามารถให้ค่าคงที่หรือ expression ได้โดยตรง
ผลลัพธ์ที่ได้คือ
นั่นคือ aและ b อ้างอิงหน่วยความจำตำแหน่งเดียวกัน ซึ่งเมื่อเราส่งตัวแปรแบบpass by reference แล้วเมื่อเรามีการ เพิ่มค่า xอีก10 ในฟังก์ชันtest ค่าของ a ก็จะเปลี่ยนด้วยแล้วไม่มีการ copyตัวแปรเหมือน pass by value

เราสามารถส่งค่ากลับ ด้วยการอ้างอิงได้ด้วย
เช่น
int & max(int &a,int &b){
return (a>b)? a:b ; //ไม่สามารถreturnเป็น a+10ได้ เนื่องจากเป็นexpression
}
int c=20;
int d=10;
max(c,d)=30;
จะได้ว่า ผลลัพธ์ที่ส่งกลับมาจากการเรียก ฟังก์ชันmax คือ ค่าที่มากที่สุดของa,b +1โดยค่าจะถูกเก็บในตัวที่
มากนั่นคือc=30

อีกอย่างหนึ่งก็คือการส่งค่าไปยังฟังก์ชันผ่านตัวชี้เช่น
void test3(int *x){
(*a)++;
}
int a=10;
test(&a)
การใช้ตัวชี้เพื่อรับค่าำพารามิเตอร์นั้นจะเป็นการใช้ตัวชี้ ชี้ไปยังหน่วยความจำในตำแหน่งเดียวกับ a ดังนั้นการใช้ (*x)++ ค่าของ aก็จะเปลี่ยนตามด้วย

ไม่มีความคิดเห็น:

แสดงความคิดเห็น