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

การเข้าถึง Array ที่ไม่ได้ Initialize ในภาษา C


โจทย์

ในภาษา C ถ้าใช้ Array ที่ไม่ได้ Initialize โปรแกรมจะทำงานได้หรือไม่?

คำตอบ

  • คอมไพเลอร์ไม่แจ้ง Error** ไม่ว่าจะเป็น Compile-time หรือ Runtime
  • ค่าที่ได้จะเป็น **Garbage Values** (ค่ากचरा - ค่าสลับซับซ้อนจากหน่วยความจำเก่า)
  • ควร Initialize Array เสมอ** ก่อนใช้งาน

ตัวอย่างที่ 1: เปรียบเทียบ Array ที่ Init และไม่ Init

#include <stdio.h>
int main() {
    int a[4];           // ไม่ได้ initialize
    int b[4] = {1};     // init ตัวแรก = 1, ที่เหลือ = 0
    int c[4] = {1,2,3,4}; // init ครบ
    int i;
    
    printf("Array a (uninitialized):\n");
    for (i = 0; i < 4; i++)
        printf("a[%d]: %d\n", i, a[i]);
    
    printf("\nArray b (partial init):\n");
    for (i = 0; i < 4; i++)
        printf("b[%d]: %d\n", i, b[i]);
    
    printf("\nArray c (fully initialized):\n");
    for (i = 0; i < 4; i++)
        printf("c[%d]: %d\n", i, c[i]);
    
    return 0;
}

ผลลัพธ์ตัวอย่าง (ค่าจะต่างกันทุกครั้ง):


Array a (uninitialized):
a[0]: 4195872
a[1]: 0
a[2]: 4195408
a[3]: 0

Array b (partial init):
b[0]: 1
b[1]: 0
b[2]: 0
b[3]: 0

Array c (fully initialized):
c[0]: 1
c[1]: 2
c[2]: 3
c[3]: 4

ตัวอย่างที่ 2: Array ไม่ Init ทั้งหมด

#include <stdio.h>
int main() {
    int A[4];  // ไม่ init
    int B[4];  // ไม่ init
    int C[4] = {1, 2}; // init 2 ตัวแรก
    int i;
    
    printf("Array A:\n");
    for (i = 0; i < 4; i++) printf("A[%d]: %d\n", i, A[i]);
    
    printf("\nArray B:\n");
    for (i = 0; i < 4; i++) printf("B[%d]: %d\n", i, B[i]);
    
    printf("\nArray C:\n");
    for (i = 0; i < 4; i++) printf("C[%d]: %d\n", i, C[i]);
    
    return 0;
}

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


Array A:
A[0]: 4195856
A[1]: 0
A[2]: 4195408
A[3]: 0

Array B:
A[0]: -915120393
A[1]: 32767
A[2]: 0
A[3]: 0

Array C:
C[0]: 1
C[1]: 2
C[2]: 0
C[3]: 0

สรุปและข้อแนะนำ

Best Practice: Initialize array เสมอตอนประกาศ ป้องกัน Bug ที่ยากต่อการ Debug
การ Initializeค่าที่ได้แนะนำ?
int a[10];Garbage values❌ ไม่แนะนำ
int a[10] = {0};ทั้งหมด = 0✅ แนะนำ
int a[10] = {1,2,3};3 ตัวแรก = 1,2,3 ที่เหลือ = 0✅ แนะนำ
int a[] = {1,2,3};ขนาด 3, ค่า 1,2,3✅ แนะนำ