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

โครงสร้าง (Structure) ในขอบเขตท้องถิ่น (Local Scope) ในภาษา C


Structure (โครงสร้าง) คืออะไร?

Structure คือการรวมตัวแปรที่มี **ชนิดข้อมูลต่างกัน** เข้าด้วยกันภายใต้ชื่อเดียว

คุณสมบัติของ Structure

  • คัดลอกโครงสร้างทั้งชุดได้ด้วย = (Assignment operator)
  • สามารถสร้าง **Nested Structure** (โครงสร้างซ้อนโครงสร้าง) ได้
  • ส่งโครงสร้างทั้งชุด สมาชิกเดี่ยว หรือที่อยู่ โครงสร้าง ไปฟังก์ชันได้
  • สามารถสร้าง **Pointer to Structure** ได้

ไวยากรณ์การประกาศ

struct tagname {
    datatype member1;
    datatype member2;
    // ...
    datatype memberN;
};

ตัวอย่าง: โครงสร้างใน Local Scope

#include <stdio.h>

// Global structure (นอกฟังก์ชัน)
struct {
    char name[20];
    int age;
    int salary;
    char add[30];
} emp1, emp2;

// ฟังก์ชันที่มี Local Structure
int manager() {
    struct {
        char name[20];
        int age;
        int salary;
        char add[50];
    } manager;
    
    manager.age = 27;
    if (manager.age > 30)
        manager.salary = 65000;
    else
        manager.salary = 55000;
    return manager.salary;
}

int main() {
    // รับข้อมูล emp1
    printf("Enter name of emp1: ");
    scanf("%19s", emp1.name);
    printf("Enter address of emp1: ");
    scanf("%29s", emp1.add);
    printf("Enter salary of emp1: ");
    scanf("%d", &emp1.salary);
    
    // รับข้อมูล emp2
    printf("Enter name of emp2: ");
    scanf("%19s", emp2.name);
    printf("Enter address of emp2: ");
    scanf("%29s", emp2.add);
    printf("Enter salary of emp2: ");
    scanf("%d", &emp2.salary);
    
    printf("\nEmp1 salary: %d", emp1.salary);
    printf("\nEmp2 salary: %d", emp2.salary);
    printf("\nManager salary: %d", manager());
    
    return 0;
}

ผลลัพธ์ตัวอย่าง:


Enter name of emp1: hari
Enter address of emp1: hyderabad
Enter salary of emp1: 4000
Enter name of emp2: lucky
Enter address of emp2: chennai
Enter salary of emp2: 5000

Emp1 salary: 4000
Emp2 salary: 5000
Manager salary: 55000

สรุปขอบเขต (Scope)

ประเภทประกาศที่ขอบเขตที่เข้าถึงได้
Global Structนอกฟังก์ชันทั้งหมดทุกฟังก์ชันในไฟล์
Local Struct (ในฟังก์ชัน)ภายในฟังก์ชันเฉพาะในฟังก์ชันนั้น
Local Struct (ใน Block {})ภายใน Blockเฉพาะใน Block นั้น

หมายเหตุ

  • Structure ที่ประกาศใน Block (เช่นใน if, for, {}) จะมีขอบเขตเฉพาะ Block นั้น
  • Structure แบบไม่มี Tag Name (Anonymous) ไม่สามารถนำไปประกาศตัวแปรที่อื่นได้
  • ใช้ typedef เพื่อสร้างชื่อชนิดข้อมูลใหม่ จะสะดวกกว่า