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

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

การใช้ตัวชี้ฟังก์ชัน

พอดีไปติดเรื่องการใช้ตัวชี้ฟังก์ชัน(Function Pointer) ซึ่งคิดว่ามันเป็นข้อดีอีกอย่างหนึ่งของ C++มาดูกัน

int test1(int a,int b){
return a+b;
}

ใน main
------------------------------
int (*func_test)(int,int); // ประกาศตัวชี้ฟังก์ชัน

func_test=test1; //ให้ตัวชี้ไปชี้ที่หน่วยความจำที่เก็บฟังก์ชันนั้นหรือ func_test=&test1

cout<<(*func_test)(10,20); //เรีัยกใช้ ฟังก์ชันผ่าน ตัวชี้

ซึ่งการทำเช่นนี้จะช่วยให้่เราสามารถส่งผ่านฟังก์ชันไปเป็นพารามิเตอร์ให้กับฟังก์ชันโดยใช้ตัวชี้ได้

ตัวอย่างเช่น

int test(int a , intb){
return a+b;
}

int dosomething( int (*func_test)(int,int) , int a,int b){
return (*func_test)(a,b);
}

cout<test,10,20);

สิ่งที่น่าสนใจคือการส่ง test ผ่าน ฟังก์ชัน dosomething() เนื่องจากเมื่อโปรแกรมถูกเรียกให้ทำงาน ระบบปฏิบัติการจะมีการจัดสรรหน่วยความจำให้กับตัวแปร ,ฟังก์ชัน ,object, ... ดังนั้น ถ้าเราประกา่ศ function test ก็จะมีการจองหน่วยความจำให้กับฟังก์ชัน test ดังนั้น
ถ้าจะให้ไม่งงก็สามารถเรียกแบบนี้ก็ได้
cout<test,10,20); เป็นการส่งตน.หน่วยความจำไปให้ตัวชี้ เราก็สามารถใช้ตัวชี้เรียกใช้ฟังก์ชันดังกล่าวได้

โดยปกติแล้ว การเรียกใช้งานฟังก์ชันจะถูกเรียกใช้ในตอน คอมไพล์ไทม์ ซึ่งเป็นการกำหนด ว่าฟังก์ชันนี้ถูกเรียกใช้ตอนใด อย่างตายตัว ซึ่งใน c++สามารถเรียกใช้ฟังก์ชันในขณะรันไทม์ได้ ซึ่งเรียกว่า callback function

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

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