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

การส่งสมาชิก Structure แยกต่างหากเป็น Argument ในภาษา C

วิธีนี้ส่ง สมาชิกแต่ละตัวของ Struct แยกกันเป็นพารามิเตอร์ เรียกว่า Pass by Value สำหรับแต่ละสมาชิก

หลักการ

  • ส่งสมาชิกแต่ละตัวใน Function Call: func(s.sno, s.sname, s.marks)
  • รับใน Function Header ด้วยตัวแปรธรรมดา: void func(int no, char name[], float mk)

ตัวอย่างโปรแกรม: คำนวณคะแนนรวมนักเรียน

#include <stdio.h>

struct student {
    int s1, s2, s3;
} s[5];

// ฟังก์ชันรับคะแนน 3 วิชา คำนวณรวม
void addition(int a, int b, int c) {
    int sum = a + b + c;
    printf("Total = %d\n", sum);
}

int main() {
    int i;
    
    // รับข้อมูลนักเรียน 3 คน
    for(i = 0; i < 3; i++) {
        printf("Student %d:\n", i+1);
        printf("Subject 1: "); scanf("%d", &s[i].s1);
        printf("Subject 2: "); scanf("%d", &s[i].s2);
        printf("Subject 3: "); scanf("%d", &s[i].s3);
    }
    
    // เรียกฟังก์ชันส่งสมาชิกแต่ละตัว
    for(i = 0; i < 3; i++) {
        printf("Student %d: ", i+1);
        addition(s[i].s1, s[i].s2, s[i].s3);
    }
    
    return 0;
}

ผลลัพธ์

Student 1:
Subject 1: 80
Subject 2: 75
Subject 3: 90
Student 1: Total = 245
Student 2: Total = ...
...

ข้อดี-ข้อเสีย

ข้อดีข้อเสีย
เข้าใจง่าย โค้ดอ่านง่าย ถ้า Struct มีสมาชิกเยอะ จะต้องส่งพารามิเตอร์เยอะ
เหมาะกับ Struct ขนาดเล็ก ไม่สามารถแก้ไขค่าใน Struct ตัวจริงได้ (Pass by Value)
ไม่ต้องรู้โครงสร้าง Struct ในฟังก์ชัน โค้ดยาวเมื่อ Struct ใหญ่

เมื่อไหร่ควรใช้วิธีไหน?

  • ส่ง Struct ทั้งอัน (Pass by Reference): Struct ใหญ่, ต้องแก้ไขค่า, เน้นประสิทธิภาพ
  • ส่งสมาชิกแยกต่างหาก: Struct เล็ก, ไม่ต้องแก้ไขค่า, ต้องการความชัดเจน