ตอนที่ 3 : การรับค่า ส่งค่า จาก function

. . . . . . . .มาแล้วๆ หายไปนานโทษที แหะ แหะ เอาละคราวนี้เป็นการตั้งเงื่อนไขให้กับโปรแกรม และการผ่านค่าไปยัง function ดูได้จากเวลาเราจะให้โปรแกรมทำอะไร เราก็ต้องส่งค่าไปยัง function ที่ต้องการ แบบนี้
#include <stdio.h>

#include <conio.h>

int main( )

{

printf( "Sawasdee\n" ); //<-- ดูตรงนี้

return 0;

}

Sawasdee
. . . . . . . .จากตัวอย่างแจกแจงได้ออกเป็น

printf คือ function

"Sawasdee" คือ ข้อความที่ส่งไปให้ function ทำงานนั่นเอง

. . . . . . . .มาดูอีกตัวอย่าง การส่งค่าให้กับ function ที่เราเขียนขึ้นเอง

#include <stdio.h>

#include <conio.h>

void function1( char *msg ) //<-------- รับค่าเป็นข้อความ จะอธิบายให้ทีหลังเรื่อง char * นะครับ

{

printf( "%s", msg ); //<------ รับค่าที่ส่งมา ไปให้ function printf แสดงข้อความที่ส่งมา

}

int function2( int param1, int param2 ) //<-------- รับค่าเป็น Integer

{

printf( "%i %i", param1, param2 ); //<------ รับค่าที่ส่งมา ไปให้ function printf แสดงค่าของตัวแปร param1 และ param2

return 0; //<--- ต้องส่งค่ากลับเพราะไม่ใช่ function แบบ void

}

int main( )

{

printf( "Sawasdee\n" );

function1( " ha ha ha" ); //<-- ดูตรงนี้

function2( 10, 20 );

return 0;

}

Sawasdee

ha ha ha

10 20

. . . . . . . .จากตัวอย่างข้างบนเป็นการส่งค่าไปให้ function และค่าที่เราส่งไปนั้นเราเรียกว่า พารามิเตอร์ เราสามารส่งค่า พารามิเตอร์ ได้หลายตัวและก็ได้หลากหลายรูปแบบ ลองดูตัวอย่างนะครับ เป็นการส่งค่าไปให้ function แบบผสม
#include <stdio.h>

#include <conio.h>

void function1( int param1, int param2, long param2, char *param4) //<-------- รับค่าเป็น Integer, Long, char*

{

printf( "%i %i %i %s \n", param1, param2, param3, param4); //<------ รับค่าที่ส่งมา ไปให้ function printf

return 0; //<--- ต้องส่งค่ากลับเพราะไม่ใช่ function แบบ void

}

int main( )

{

printf( "Sawasdee\n" );

function1( 10, 20, 100, " ha ha ha" ); //<-- ดูตรงนี้

return 0;

}

Sawasdee

10 20 100 ha ha ha

. . . . . . . .ต่อไปเป็นการส่งค่าคืนกลับ สังเกตุการกำหนดรูปแบบ function นะครับ จะเห็นได้ว่ามีทั้งแบบ void และ int ถ้าเป็น void เราไม่ต้องส่งค่ากลับ แต่ถ้าเป็น int เราต้องส่งค่ากลับและการรับค่าที่ส่งกลับเราทำได้แบบนี้
#include <stdio.h>

#include <conio.h>

int function1( int param1, int param2 ) //<------ ต้องกำหนดรูปแบบ function ไม่ให้เป็นรูปแบบ void

{

return param1 + param2; //<--- ต้องส่งค่ากลับเพราะไม่ใช่ function แบบ void

}

int main( )

{

int i = function1( 10, 20 ); //<------ เรียก fuction1 แล้วส่งค่าคืนให้กับ ตัวแปร i

printf( "Value in %i", i ); //<----- พิมพ์ค่าที่อยู่ใน i

return 0;

}

Value in 30
. . . . . . . .การส่งค่ากลับเราต้องใช้คำสั่ง return นะครับ จะส่งค่าแบบไหนก็ใช้ return ลองเขียน function มาเยอะๆ แล้วมาผสมกับแบบนี้ดูนะครับ จะสามารถพลิกแพงได้หลายตลบเลยทีเดียว ดูตัวอย่างข้างล่างนะครับ
#include <stdio.h>

#include <conio.h>

int function1( int param1, int param2 )

{

return param1 + param2; //<--- ต้องส่งค่ากลับเพราะไม่ใช่ function แบบ void

}

int function2( int param1, int param2 )

{

return param1 * param2; //<----- สั่งให้ทำการคูณตัวแปรที่ส่งมาและส่งกลับ

}

int main( )

{

int i = function1( 10, 20 ) + function2(10,20); //<----- สังเกตดี ดี

printf( "Value in %i", i ); //<----- พิมพ์ค่าที่อยู่ใน i

return 0;

}

Value in 230
. . . . . . . .การทำงานของตัวอย่างข้างบนคือ เรียก function1 มาทำการบวกค่าที่อยู่ในตัวแปร param2 และ param2 ต่อไปเรียก function2 มาทำการคูณค่าที่อยู่ในตัวแปร param1 และ param2 และส่งค่ากลับไปยังตัวแปร i แล้วก็พิมพ์ออกมา ง่ายๆ ครับลองดูหลายๆรอบ ต่อไป ถ้าหากว่าเราต้องการส่งค่ามากกว่า 1 การใช้ return ส่งได้เพียงค่าเดียวแล้วเราจะทำยังงัย เอ้อ..................hmmm....... งั้นดูนี่
#include <stdio.h>

#include <conio.h>

int function1( int param1, int *param2 )

{

*param2 = param1; //<------ ให้ค่า param1 แก่ param2 สังเกตุเครื่องหมายดอกจันท์นะครับ

return param1;

}

int main( )

{

int i;

int param2; //<--- กำหนดตัวแปรเพื่อที่จะรับค่าที่จะส่งกลับมา

i = function1( 10, &param2 ); //<-------- ดูที่ param2 นะครับ

i = function1( 10, 20 ); //<-------- ห้าม !! ทำแบบนี้

printf( "%i %i\n", i, param2 ); //<----- พิมพ์ค่าที่อยู่ใน i และ param2

return 0;

}

10

10

. . . . . . . .เริ่มมีตัวประหลาดเข้ามาแล้วทีนี้ ฮ่า ฮ่า ฮ่า ไม่ยากครับ มันเป็นรูปแบบเฉยๆ ดูที่ function1 นะครับ

int function1( int param1, int *param2 )

. . . . . . . .สังเกตที่ param2 จะมีเครื่องหมายดอกจันท์ เพื่อที่จะบอกว่าตัวแปรนั้นส่งค่ากลับได้ และการใช้ตัวแปร param2 ต้องมีเครื่องหมายดอกจันทน์นำหน้าเสมอ แล้วการส่งค่าไปยัง function1 ต้องมีเครื่องหมาย & นำหน้าตัวแปรเสมอ อย่าส่งตัวเลขไปละ ต้องสร้างตัวแปรมารองรับครับ ดูอีกตัวอย่าง

#include <stdio.h>

#include <conio.h>

int function1( int param1, int *param2 )

{

*param2 = param1 + (*param2); //<------ ให้ค่า param1 + param2

return param1;

}

int main( )

{

int i;

int param2 = 20; //<--- กำหนดตัวแปรเพื่อที่จะรับค่าที่จะส่งกลับมา และให้ค่าเริ่มต้นแก่ตัวแปร

i = function1( 10, &param2 ); //<--- ต้องมีเครื่องหมาย & นำเหน้าเสมอ

printf( "%i %i\n", i, param2 );

return 0;

}

10

30

. . . . . . . .คราวนี้มีการให้ค่าแก่ตัวแปร param2 ก่อนแล้วนำไปทำการบวกกันที่ function1 เราต้องใส้เครื่องหมายวงเล็กครอบตัวแปร param2 นะครับ เพราะถ้าเขียนแบบนี้

*param2 = param1 + *param2;

. . . . . . . .เดี๋ยวเราจะงงถ้าไม่มีวงเล็บ ก็ให้รู้ไว้ว่าถ้าเราจะใช้ตัวแปรแบบ param2 ก็ต้องมีเครื่องหมายวงเล็บ แต่ถ้าจะให้ค่า ก็ไม่ต้องมีเครื่องหมายวงเล็กนะครับ แบบนี้

*param2 คือ การให้ค่าแก่ตัวแปร

(*param2) คือ การใช้ตัวแปร

. . . . . . . .และเราสามารถส่งค่ากลับมาได้หลายๆตัวเช่นกัน ลองเขียนดูนะครับ

#include <stdio.h>

#include <conio.h>

int function1( int param1, int *param2, int *param3 )

{

*param2 = param1 + (*param2); //<------ ให้ค่า param1 + param2

*param3 = 30; //<------ ให้ค่า param3

return param1;

}

int main( )

{

int i;

int param2 = 20; //<--- กำหนดตัวแปรเพื่อที่จะรับค่าที่จะส่งกลับมา และให้ค่าเริ่มต้นแก่ตัวแปร

int param3; //<--- กำหนดตัวแปรเพื่อที่จะรับค่าที่จะส่งกลับมา ไม่ได้กำหนดค่าอะไร

i = function1( 10, &param2, &param3 ); //<--- ต้องมีเครื่องหมาย & นำเหน้าเสมอ

printf( "%i %i %i\n", i, param2, param3 );

return 0;

}

10

30

30

. . . . . . . .จะเห็นได้ว่าเราสามารถเขียน function ไปคำนวณและส่งค่ากลับมาได้หลายตัวเลยทีเดียว ทำให้การใช้งานยิ่งสะดวกขึ้น ลองเขียน function มาเยอะๆ นะครับ หลายๆ รูปแบบ

สรุป วันนี้ได้อะไรหว่า ???

void function1( char *msg ) //<-------- รับค่าเป็นข้อความ จะอธิบายให้ทีหลังเรื่อง char * นะครับ

int function2( int param1, int param2 ) //<-------- รับค่าเป็น Integer

void function1( int param1, int param2, long param2, char *param4) //<-------- รับค่าเป็น Integer, Long, char*

return param1 + param2; //<--- ต้องส่งค่ากลับเพราะไม่ใช่ function แบบ void

int i = function1( 10, 20 ); //<------ เรียก fuction1 แล้วส่งค่าคืนให้กับ ตัวแปร i

int function1( int param1, int *param2 ) //<--- ดูที่ param2

int function1( int param1, int *param2, int *param3 )

*param2 = param1; //<------ ให้ค่า param1 แก่ param2 สังเกตุเครื่องหมายดอกจันท์นะครับ

i = function1( 10, 20 ); //<-------- ห้าม !! ทำแบบนี้

*param2 = param1 + (*param2); //<------ ให้ค่า param1 + param2

*param3 = 30; //<------ ให้ค่า param3

i = function1( 10, &param2, &param3 ); //<--- ต้องมีเครื่องหมาย & นำเหน้าเสมอ

. . . . . . . .วันนี้ก็ได้เรื่องการสร้าง function เพิ่มเติม จากครั้งที่แล้วได้แก่ การส่งค่า การรับค่าจาก function คิดว่าไม่ยากอะไร ลองเขียนมาหลายๆ function แล้วก็ลองใช้ หลายๆ รูปแบบนะครับ พรุ่งนี้มาลุยเรื่องเงื่อนไข เพราะการจะสั่งให้ computer ทำงานก็ต้องมีการกำหนดเงื่อนไขการทำงาน แล้วจะกำหนดอย่างไร ติดตามๆ นะครับ