โจทย์
ในภาษา 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
สรุปและข้อแนะนำ
| การ 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 | ✅ แนะนำ |