344-201 Structure Programming ฟังก์ชันในภาษาซี 344-201 Structure Programming
PROGRAMMER DEFINED FUNCTION ฟังก์ชันในภาษาซี ฟังก์ชันในภาษาซี สามารถแบ่งตามแหล่งที่มาได้ 2 ประเภทคือ ฟังก์ชันมาตรฐานในภาษาซี (C Standard Function) ฟังก์ชันที่สร้างขึ้นใหม่โดยโปรแกรมเมอร์ (Programmer-Defined Function) FUNCTIONS IN C C STANDARD LIBRARY PROGRAMMER DEFINED FUNCTION
ฟังก์ชันมาตรฐานในภาษาซี เป็นฟังก์ชันที่มาพร้อมกับตัวแปลภาษาซี เป็นฟังก์ชั่นที่เน้นงานพื้นฐาน เช่น ฟังก์ชันคำนวณทางคณิตศาสตร์, ฟังก์ชันจัดการข้อความ, ฟังก์ชันจัดการเวลา การเรียกใช้งานต้องเขียนคำสั่ง #include <header file> ไว้ที่ส่วนหัวของโปรแกรม header file เป็นไฟล์นามสกุล .h เช่น stdio.h, math.h, string.h
ฟังก์ชันมาตรฐานในภาษาซี ตัวอย่างการเรียกใช้ ฟังก์ชันมาตรฐานในภาษาซี
ฟังก์ชันที่สร้างขึ้นใหม่โดยโปรแกรมเมอร์ การเขียนโปรโตไทป์ การเรียกใช้ฟังก์ชัน การนิยามฟังก์ชัน
ฟังก์ชันที่สร้างขึ้นใหม่โดยโปรแกรมเมอร์ การสร้างฟังก์ชันประกอบด้วย 3 ส่วนหลัก ได้แก่ การเขียนโปรโตไทป์สำหรับฟังก์ชัน การนิยามฟังก์ชัน การเรียกใช้ฟังก์ชัน
รูปแบบของฟังก์ชัน รูปแบบของการนิยามฟังก์ชัน เขียนได้ดังต่อไปนี้ ตัวอย่างการนิยามฟังก์ชัน return-value-type function-name([parameter-list]) { declarations; statements; [return ;] }
ฟังก์ชันที่สร้างขึ้นใหม่โดยโปรแกรมเมอร์ รูปแบบฟังก์ชันของภาษาซีมี 4 รูปแบบ ฟังก์ชันแบบไม่มีการส่งค่ากลับ และไม่มีพารามิเตอร์ ฟังก์ชันแบบไม่มีการส่งค่ากลับ และมีพารามิเตอร์ ฟังก์ชันแบบมีการส่งค่ากลับ และไม่มีพารามิเตอร์ ฟังก์ชันแบบมีการส่งค่ากลับ และมีพารามิเตอร์
ฟังก์ชันแบบไม่มีการส่งค่ากลับ และไม่มีพารามิเตอร์ ฟังก์ชันแบบไม่มีการส่งค่ากลับ และไม่มีพารามิเตอร์ รูปแบบของการนิยามฟังก์ชัน ตัวอย่าง void function-name () { declarations; statements; }
ฟังก์ชันแบบไม่มีการส่งค่ากลับ และไม่มีพารามิเตอร์ (ต่อ) ฟังก์ชันแบบไม่มีการส่งค่ากลับ และไม่มีพารามิเตอร์ (ต่อ) การเรียกใช้ฟังก์ชัน ตัวอย่าง function-name(); การเรียกใช้ฟังก์ชัน การนิยามฟังก์ชัน
ฟังก์ชันแบบไม่มีการส่งค่ากลับ และมีพารามิเตอร์ รูปแบบของการนิยามฟังก์ชัน ตัวอย่าง void function-name (parameter-list) { declarations; statements; }
ฟังก์ชันแบบไม่มีการส่งค่ากลับ และมีพารามิเตอร์ (ต่อ) การเรียกใช้ฟังก์ชัน ตัวอย่าง function_name(actual_arg_list) การเรียกใช้ฟังก์ชัน การนิยามฟังก์ชัน
ฟังก์ชันแบบมีการส่งค่ากลับ และไม่มีพารามิเตอร์ ฟังก์ชันแบบมีการส่งค่ากลับ และไม่มีพารามิเตอร์ รูปแบบของการนิยามฟังก์ชัน ตัวอย่าง return-value-type function-name() { declarations; statements; return return-value; }
ฟังก์ชันแบบมีการส่งค่ากลับ และไม่มีพารามิเตอร์ (ต่อ) ฟังก์ชันแบบมีการส่งค่ากลับ และไม่มีพารามิเตอร์ (ต่อ) การเรียกใช้ฟังก์ชัน ตัวอย่าง variable = function_name() การเรียกใช้ฟังก์ชัน การนิยามฟังก์ชัน
ฟังก์ชันแบบมีการส่งค่ากลับ และมีพารามิเตอร์ ฟังก์ชันแบบมีการส่งค่ากลับ และมีพารามิเตอร์ รูปแบบของการนิยามฟังก์ชัน ตัวอย่าง return-value-type function-name(parameter-list) { declarations; statements; return return-value; }
ฟังก์ชันแบบมีการส่งค่ากลับ และมีพารามิเตอร์ (ต่อ) ฟังก์ชันแบบมีการส่งค่ากลับ และมีพารามิเตอร์ (ต่อ) การเรียกใช้ฟังก์ชัน ตัวอย่าง variable = function_name(actual_arg_list) การเรียกใช้ฟังก์ชัน การนิยามฟังก์ชัน
ต้นแบบฟังก์ฟชัน ต้นแบบฟังก์ชัน หรือ โปรโตไทป์ของฟังก์ชัน เป็นการอธิบายรายละเอียดของฟังก์ชันให้ภาษาซีรู้จัก รูปแบบการเขียนโปรโตไทป์ จะเหมือนกับบรรทัดแรกของฟังก์ชัน ตัวอย่างการเขียนโปรโตไทป์ void my_print(); char my_print(); void my_print(char ch, int x); char my_print(int x); โดยจะเขียนไว้ก่อนฟังก์ชัน main() return-value-type function-name([parameter-list]);
แบบฝึกหัด 1 เขียนโปรแกรมด้านล่าง โดยมีการเรียกใช้ฟังก์ชัน main() { int a,b,sum; a=5; b=6; sum=a+b; printf(“%d+%d=%d”,a,b,sum); }
แบบฝึกหัด 2 เขียนฟังก์ชัน max() สำหรับหาค่า max และฟังก์ชัน min() สำหรับหาค่า min main() { int max_v, min_v; max_v = max(3,1,5,6); min_v = min(3,1,5,6); printf(“maximum is %d, minimum is %d”,max_v,min_v); }
ข้อมูลกับฟังก์ชัน ตัวแปรในภาษาซี Local variable – ตัวแปรที่อยู่ในฟังก์ชันใดฟังก์ชันหนึ่ง และใช้เฉพาะในฟังก์ชันนั้นเท่านั้น Global variable – ตัวแปรที่ถูกกำหนดก่อนฟังก์ชัน main() และทุก ๆ ฟังก์ชันสามารถเรียกใช้ได้
ตัวอย่าง
แบบฝึกหัด 3 ข้อมูลกับฟังก์ชัน (ขอบเขตของตัวแปร) หาผลลัพธ์ที่ได้จากการทำงานของโปรแกรม ต่อไปนี้
การรับและการส่งข้อมูลให้กับฟังก์ชัน Passing by value (การส่งผ่านโดยค่า) Passing by reference (การส่งผ่านโดยการอ้างอิง)
Passing by value การส่งผ่านค่า การรับค่า
Passing by reference ที่อยู่ (address) ของตัวแปรที่อ้างถึงจะถูกสำเนาเพื่อส่งไปให้ฟังก์ชัน การเปลี่ยนแปลงค่าของตัวแปรที่อยู่ในฟังก์ชันที่ถูกเรียก (Called function) จะทำให้ค่าของตัวแปรที่อยู่ในฟังก์ชันที่เรียกไป (Calling function ) เปลี่ยนแปลงด้วย ใช้ตัวดำเนินการ & และ * ในการส่งและรับค่าฟังก์ชัน ตามลำดับ
Passing by reference (ต่อ) ตัวดำเนินการ & และ * พอยน์เตอร์ (ตัวชี้) คือ ตัวแปรหรือค่าคงที่ที่เก็บตำแหน่งที่อยู่ของหน่วยความจำ (memory address) ตัวแปรพอยน์เตอร์ (pointer variable) คือ ตัวแปรที่เก็บค่าตำแหน่งที่อยู่ที่ชี้ไปยังค่าที่เก็บอยู่จริง ตัวดำเนินการ & : เป็นตัวดำเนินการที่จะเก็บค่าตำแหน่งที่อยู่ของหน่วยความจำ (memory address) ของตัวถูกดำเนินการ(operand)
ตัวดำเนินการ & และ *
การประกาศตัวแปรพอยเตอร์ รูปแบบ: ชนิดตัวแปร *ชื่อตัวแปร ตัวอย่าง เช่น char *ch; int *m;
Passing by reference (ต่อ) ตัวอย่างโปรแกรม การส่งผ่านโดยการอ้างอิง การรับค่า
แบบฝึกหัด 4 เขียนโปรแกรมด้านล่าง โดยมีการเรียกใช้ฟังก์ชัน main() { int x,y,temp; x=5; y=6; temp=x; x=y; y=temp; printf(“x=%d, y=%d”,x,y); }