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

การส่ง Structure ทั้งชุดเป็น Argument ไปฟังก์ชันในภาษา C


การส่ง Structure ทั้งชุด (Pass by Value)

ส่งชื่อตัวแปร Structure ไปใน Function Call รับใน Structure อีกตัวหนึ่งใน Function Header

ข้อเสีย

  • สร้าง **Copy ของ Structure ทั้งชุด** ใหม่ → ใช้หน่วยความจำมาก
  • ช้ากว่าการส่ง Pointer
  • การเปลี่ยนแปลงในฟังก์ชัน **ไม่ส่งผลกลับ** ตัวแปรต้นทาง

ตัวอย่างโปรแกรม

#include <stdio.h>

// ประกาศ Structure
struct add {
    int var1;
    int var2;
} a;

// ฟังก์ชันรับ Structure ทั้งชุด (Pass by Value)
void show(struct add a) {
    int sum = a.var1 + a.var2;
    printf("Added value is %d\n", sum);
}

int main() {
    struct add a;
    printf("Enter variable 1: ");
    scanf("%d", &a.var1);
    printf("Enter variable 2: ");
    scanf("%d", &a.var2);
    
    show(a); // ส่ง copy ของ a
    return 0;
}

ผลลัพธ์:


Enter variable 1: 30
Enter variable 2: 40
Added value is 70

วิธีที่ดีกว่า: ส่ง Pointer (Pass by Reference)


// ฟังก์ชันรับ Pointer to Structure
void show_ptr(struct add *ptr) {
    int sum = ptr->var1 + ptr->var2;
    printf("Added value is %d\n", sum);
    // สามารถแก้ไขค่าใน struct ต้นทางได้
    ptr->var1 = 100;
}

int main() {
    struct add a = {30, 40};
    show_ptr(&a); // ส่ง address
    return 0;
}

เปรียบเทียบ

วิธีSyntaxMemorySpeedModify Original?
Pass by Valuefunc(struct s)Copy ทั้งชุดช้า (Struct ใหญ่)ไม่ได้
Pass by Referencefunc(struct *s)แค่ Pointer (4/8 bytes)เร็วได้

เมื่อไหร่ควรใช้ Pass by Value?

  • Struct ขนาดเล็ก (ไม่เกิน 16-32 bytes)
  • ไม่ต้องการแก้ไขค่าต้นทาง
  • ต้องการความปลอดภัย (Immutable)