เราสามารถใช้ตัวแปรพอยน์เตอร์มาช่วยในการรับค่าและส่งคืนค่ากลับในฟังก์ชันที่เขียนขึ้นได้ดังนี้
6.6.1 การส่งค่าไปยังฟังก์ชัน (passing address to function) สามารถทำได้ 2 วิธี
1) การส่งค่าข้อมูลไปยังฟังก์ชันที่ต้องการ (passing data values to function)
การส่งค่าข้อมูล 1 ค่าหรือหลายค่าจากฟังก์ชันหนึ่งไปยังอีกฟังก์ชันหนึ่ง คือการคัดลอกค่าข้อมูล (duplicated value) จากที่หนึ่งไปยังอีกที่หนึ่ง
2) การส่งตำแหน่งของข้อมูลไปยังฟังก์ชัน (passing address to a function)
การส่งตำแหน่งของข้อมูลไปยังฟังก์ชันที่ต้องการจะต้องใช้ตัวแปรพอยน์เตอร์มาช่วยในการเก็บตำแหน่งของข้อมูลที่ส่งมา
เพื่อความเข้าใจเกี่ยวกับการส่งค่าข้อมูลและตำแหน่งของข้อมูลไปยังฟังก์ชัน ที่ต้องการ ให้ศึกษาโปรแกรมตัวอย่างดังต่อไปนี้
โปรแกรมตัวอย่างที่ 6.3 แสดงการส่งค่าข้อมูลและตำแหน่งของข้อมูลไปยังฟังก์ชันที่ต้องการ
/* passdata.c */ |
||||
ผลลัพธ์ที่ได้จากโปรแกรม
จากโปรแกรมตัวอย่างที่ 6.3 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 3 คำสั่ง void f1(int, int); เป็นการประกาศรูปแบบฟังก์ชัน f1
บรรทัดที่ 4 คำสั่ง void f2(int*, int*); เป็นการประกาศรูปแบบฟังก์ชัน f2
บรรทัดที่ 9 คำสั่ง f1(p,q); การเรียกใช้งานฟังก์ชัน f1 และส่งข้อมูลของตัวแปร p กับ q ไปยังฟังก์ชัน f1( ) ซึ่งฟังก์ชัน f1( ) อยู่คำสั่งบรรทัดที่ 14 ถึง 16
บรรทัดที่ 10 คำสั่ง f2(&p,&q); การเรียกใช้งานฟังก์ชัน f2 และส่งข้อมูลของตัวแปร p กับ q ไปยังฟังก์ชัน f2( ) ซึ่งฟังก์ชัน f2( ) อยู่คำสั่งบรรทัดที่ 17 ถึง 21
บรรทัดที่ 14 ถึง 16 เป็น ฟังก์ชันที่ตัวแปรพอยน์เตอร์ pp,qq จะรับค่าข้อมูลจากตัวแปร p และ q ที่ส่งมาให้จากจุดที่เรียกใช้งานในฟังก์ชัน main( ) ตามลำดับ และแสดงค่าตัวแปรที่ตัวแปรพอยน์เตอร์ pp และ qq รับค่ามาจากตัวแปร p และ q ออกที่จอภาพ
บรรทัดที่ 17 ถึง 21 เป็น ฟังก์ชันที่ตัวแปรพอยน์เตอร์ pp,qq จะรับค่าตำแหน่งของตัวแปร p และ q ที่ส่งมาให้จากจุดที่เรียกใช้งานในฟังก์ชัน main( ) ตามลำดับ เมื่อรับค่าแล้วให้บวกเพิ่มค่าละ 20 หลังจากนั้นนำค่าที่ตัวแปรพอยน์เตอร์ pp และ qq ชี้อยู่ แสดงออกจอภาพ
บรรทัดที่ 11 ถึง 12 ภาย หลังจากฟังก์ชัน f1( ) และ f2( ) ทำงานเสร็จแล้วพิมพ์ข้อความให้กดคีย์ใด ๆ เพื่อกลับเข้าสู่โปรแกรม และหยุดรอรับค่าใด ๆ จากคีย์บอร์ด เช่น กด enter จะกลับเข้าสู่โปรแกรมตามลำดับ
6.6.2 การคืนค่ากลับของฟังก์ชัน (returning data from functions)
โดยปกติการคืนค่ากลับมายังฟังก์ชันสามารถทำได้เพียง 1 ค่าเท่านั้น แต่ในกรณีที่ต้องการให้มีการคืนค่ากลับหลายค่าต้องใช้พอยน์เตอร์มาช่วยจึง สามารถกระทำได้ โดยมีขั้นตอนดังนี้
ขั้นตอนแรก ในโปรแกรมที่ใช้เรียกฟังก์ชัน (calling program) จะต้องใช้วิธีการส่งตำแหน่งของข้อมูลไปยังฟังก์ชัน โดยใช้เครื่องหมาย & นำหน้าชื่อตัวแปรที่ต้องการส่งค่า address ไป
ขั้นตอนที่สอง ในฟังก์ชันที่ถูกเรียกใช้ จะต้องใช้ตัวแปรพอยน์เตอร์มารับค่า address ที่ส่งมาเมื่อต้องการคืนค่ากลับให้ใช้เครื่องหมาย * นำหน้าชื่อตัวแปรพอยน์เตอร์ เพื่อคืนค่ากลับมายังตัวแปรของฟังก์ชัน
เพื่อความเข้าใจเกี่ยวกับการคืนค่ากลับของฟังก์ชัน ให้ศึกษาโปรแกรมตัวอย่างดังต่อไปนี้
โปรแกรมตัวอย่างที่ 6.4 แสดงการคืนค่ากลับของฟังก์ชันที่มากกว่า 1 ค่า
/* retudata.c */ |
||||
ผลลัพธ์ที่ได้จากโปรแกรม
จากโปรแกรมตัวอย่างที่ 6.4 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 3 คำสั่ง void back(int*,int*); เป็นการประกาศรูปแบบฟังก์ชัน back
บรรทัดที่ 8 ใน ฟังก์ชัน main( ) มีการเรียกใช้ฟังก์ชัน back(&a,&b); หมายถึงมีการส่งค่า address ของตัวแปร a และ b ไปยังตัวแปรพอยน์เตอร์ aa และ bb ของฟังก์ชัน back( ) ตามลำดับ ซึ่งฟังก์ชัน back( ) แสดงอยู่คำสั่งบรรทัดที่ 13 ถึง 16 ซึ่งมีการใช้เครื่องหมาย * อยู่หน้าตัวแปรพอยน์เตอร์ aa และ bb เพื่อบอกให้กำหนดค่าตัวเลข 300 และ 500 ให้กับตัวแปร a และ b เนื่องจากภายในตัวแปรพอยน์เตอร์ทั้งสองตัวได้เก็บค่า address แรกของตัวแปร a และ b ไว้แล้ว จึงเหมือนกับการส่งค่ากลับ 2 ค่า พร้อมกัน
บรรทัดที่ 10 และ 11 ภายหลังจากทำงานฟังก์ชัน back( ) เสร็จแล้ว
พิมพ์ข้อความให้กดคีย์ใด ๆ เพื่อกลับเข้าสู่โปรแกรม และหยุดรอรับค่าใด ๆ จากคีย์บอร์ด เช่น กด enter จะกลับเข้าสู่โปรแกรมตามลำดับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น