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

วิธีหาความยาวของอาร์เรย์ใน C/C++

มีหลายวิธีในการหาความยาวของอาร์เรย์ใน C/C++ นี่คือวิธีที่นิยมใช้งานมากที่สุด 2 วิธี

วิธีที่ 1: ใช้ตัวดำเนินการ sizeof

วิธีนี้เป็นที่นิยมและเข้าใจง่ายที่สุด โดยการหารขนาดของอาร์เรย์ทั้งหมดด้วยขนาดขององค์ประกอบหนึ่งตัว

ตัวอย่าง

#include <iostream>
using namespace std;

int main() {
    int arr[5] = {4, 1, 8, 2, 9};
    int len = sizeof(arr) / sizeof(arr[0]);
    cout << "The length of the array is: " << len;
    return 0;
}

ผลลัพธ์

The length of the array is: 5

คำอธิบาย

  • sizeof(arr) = ขนาดของอาร์เรย์ทั้งหมด (ในหน่วยไบต์)
  • sizeof(arr[0]) = ขนาดขององค์ประกอบหนึ่งตัว (ในหน่วยไบต์)
  • การหารทั้งสองค่าจะได้จำนวนองค์ประกอบ

วิธีที่ 2: ใช้ Pointer Arithmetic

วิธีนี้ใช้คุณสมบัติของ pointer ในการคำนวณที่อยู่หน่วยความจำ

ตัวอย่าง

#include <iostream>
using namespace std;

int main() {
    int arr[5] = {5, 8, 1, 3, 6};
    int len = *(&arr + 1) - arr;
    cout << "The length of the array is: " << len;
    return 0;
}

ผลลัพธ์

The length of the array is: 5

คำอธิบาย

  • &arr = ที่อยู่ของอาร์เรย์ทั้งหมด (ชนิด int (*)[5])
  • &arr + 1 = ที่อยู่ทันทีหลังจบอาร์เรย์ (เลื่อนไป 1 อาร์เรย์ = 5 int)
  • *(&arr + 1) = แปลงกลับเป็น pointer ชนิด int* ชี้ถึงตำแหน่งหลังอาร์เรย์
  • arr = pointer ชี้ตัวแรกของอาร์เรย์ (decay to int*)
  • การลบ pointer ทั้งสองให้จำนวนองค์ประกอบ

ข้อจำกัดสำคัญ

วิธีทั้งสองใช้ได้เฉพาะอาร์เรย์ที่ประกาศในขอบเขตเดียวกัน (local array) เท่านั้น หากส่งอาร์เรย์เข้าฟังก์ชัน จะ decay เป็น pointer และ sizeof จะให้ขนาดของ pointer แทน

แนวทางแก้ไขสำหรับฟังก์ชัน

// ส่งขนาดมาพร้อมกับอาร์เรย์
void printArray(int arr[], int size) {
    // ใช้ size ที่ส่งมา
}

// หรือใช้ template (C++ เท่านั้น)
template <size_t N>
void printArray(int (&arr)[N]) {
    // ใช้ N ได้เลย
}