Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Khái niệm truy cập mảng chưa khởi tạo trong C


Vấn đề

Trong C, chương trình có chạy được nếu sử dụng mảng chưa khởi tạo?

Giải pháp

  • Nếu dùng mảng chưa khởi tạo, trình biên dịch không báo lỗi biên dịch hay lỗi thực thi.

  • Mảng chưa khởi tạo cho kết quả không thể đoán trước (giá trị rác).

  • Nên luôn khởi tạo phần tử mảng với giá trị mặc định.

Chương trình ví dụ

Chương trình C truy cập mảng chưa khởi tạo:

#include <stdio.h> int main(void){     int a[4];     int b[4] = {1};     int c[4] = {1,2,3,4};     int i; //biến đếm vòng lặp     //in tất cả phần tử của các mảng     printf("\nArray a:\n");     for( i=0; i<4; i++ )         printf("arr[%d]: %d\n",i,a[i]);     printf("\nArray b:\n");     for( i=0; i<4; i++)         printf("arr[%d]: %d\n",i,b[i]);     printf("\nArray c:\n");     for( i=0; i<4; i++ )         printf("arr[%d]: %d\n",i, c[i]);     return 0; }

Kết quả

Array a: arr[0]: 4195872 arr[1]: 0 arr[2]: 4195408 arr[3]: 0 Array b: arr[0]: 1 arr[1]: 0 arr[2]: 0 arr[3]: 0 Array c: arr[0]: 1 arr[1]: 2 arr[2]: 3 arr[3]: 4

Lưu ý

Nếu không khởi tạo mảng, mặc định in ra giá trị rác và không bao giờ báo lỗi.

Ví dụ khác:

Ví dụ

#include <stdio.h> int main(void){     int A[4];     int B[4] ;     int C[4] = {1,2};     int i; //biến đếm vòng lặp     //in tất cả phần tử     printf("\nArray a:\n");     for( i=0; i<4; i++ )         printf("arr[%d]: %d\n",i,A[i]);     printf("\nArray b:\n");     for( i=0; i<4; i++)         printf("arr[%d]: %d\n",i,B[i]);     printf("\nArray c:\n");     for( i=0; i<4; i++ )         printf("arr[%d]: %d\n",i, C[i]);     return 0; }

Kết quả

Array a: arr[0]: 4195856 arr[1]: 0 arr[2]: 4195408 arr[3]: 0 Array b: arr[0]: -915120393 arr[1]: 32767 arr[2]: 0 arr[3]: 0 Array c: arr[0]: 1 arr[1]: 2 arr[2]: 0 arr[3]: 0