การส่ง Array ให้ฟังก์ชัน (2 วิธี)
- ส่ง Array ทั้งหมด (ส่ง base address)
- ส่งสมาชิกแต่ละตัว (Passing individual elements) - หัวข้อนี้
หลักการทำงาน
- ส่งค่าของ element แต่ละตัวพร้อม subscript ใน function call
- ฟังก์ชันรับในพารามิเตอร์ที่เป็นตัวแปรธรรมดา (ไม่ใช่ array)
- เป็น Pass by Value สำหรับแต่ละ element
ตัวอย่างโปรแกรมที่ 1: ส่ง Element แรกและสุดท้าย
#include <stdio.h>
void display(int a, int b);
int main() {
int a[5], i;
printf("ป้อน 5 ตัวเลข: ");
for (i = 0; i < 5; i++)
scanf("%d", &a[i]);
display(a[0], a[4]); // ส่ง element index 0 และ 4
return 0;
}
void display(int a, int b) {
printf("element แรก = %d\\n", a);
printf("element สุดท้าย = %d\\n", b);
}ผลลัพธ์
ป้อน 5 ตัวเลข: 10 20 30 40 50
element แรก = 10
element สุดท้าย = 50
ตัวอย่างโปรแกรมที่ 2: ส่ง Element ตำแหน่งต่างๆ
#include <stdio.h>
void display(int a, int b, int c);
int main() {
int a[6], i;
printf("ป้อน 6 ตัวเลข: ");
for (i = 0; i < 6; i++)
scanf("%d", &a[i]);
display(a[0], a[2], a[5]); // ส่ง element index 0, 2, 5
return 0;
}
void display(int a, int b, int c) {
printf("element แรก = %d\\n", a);
printf("element กลาง = %d\\n", b);
printf("element สุดท้าย = %d\\n", c);
}ผลลัพธ์
ป้อน 6 ตัวเลข: 10 20 30 40 50 60
element แรก = 10
element กลาง = 30
element สุดท้าย = 60
เปรียบเทียบ 2 วิธี
| วิธี | Function Call | Function Parameter | ข้อดี | ข้อเสีย |
|---|
| ส่ง element แยก | func(arr[0], arr[2]) | int x, int y | ง่าย เข้าใจง่าย เหมาะข้อมูลน้อย | โค้ดยาว ถ้า element เยอะ |
| ส่ง array ทั้งตัว | func(arr) | int arr[] หรือ int *arr | สั้น จัดการ loop ได้ ใช้ได้กับขนาดไดนามิก | ไม่รู้ขนาด array ในฟังก์ชัน (ต้องส่งแยก) |
ข้อควรระวัง
- การส่ง element แยกตัวเป็น Pass by Value การเปลี่ยนแปลงในฟังก์ชันไม่ส่งผลกลับ
- หากต้องการแก้ไข element ต้นฉบับ ต้องส่ง address:
func(&arr[i]) และรับเป็น int *p - สำหรับ array ขนาดใหญ่ ควรส่งทั้ง array (base address) แทน