Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

การส่งสมาชิก Array แยกตัวเป็นอาร์กิวเมนต์ในภาษา C

การส่ง Array ให้ฟังก์ชัน (2 วิธี)

  1. ส่ง Array ทั้งหมด (ส่ง base address)
  2. ส่งสมาชิกแต่ละตัว (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 CallFunction 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) แทน