01/10/2018, 17:46

Giá trị mặc định của biến trong C

Mình có một thắc mắc là khi khai báo biến thì giá trị mặc định khi biến đó được khởi tạo là bao nhiêu?
Mình thử viết 1 chương trình để kiểm tra thì thấy giá trị của 2 biến kiểu int a,b in ra giá trị là 2 và 32. Chả thấy liên quan đến cái gì luôn.

HK boy viết 19:48 ngày 01/10/2018

Giá trị rác

Gà Trụi Lông viết 19:52 ngày 01/10/2018

Nhưng sao nó lại gán cho 2 biến đấy giá trị như vậy? Như vậy khi khai báo 1 biến hay mảng thì mình cần khai báo giá trị ban đầu cho chúng luôn để tránh bị “giá trị rác” như vậy phải không? Mong bạn giải thích giúp mình với!

HK boy viết 19:51 ngày 01/10/2018

Nhưng sao nó lại gán cho 2 biến đấy giá trị như vậy?

Giá trị rác, giá trị trong biến là cái gì thì không ai biết.

Như vậy khi khai báo 1 biến hay mảng thì mình cần khai báo giá trị ban đầu cho chúng luôn để tránh bị “giá trị rác” như vậy phải không?

Đúng.

Trương Tấn Phát viết 19:48 ngày 01/10/2018

Do giá trị ô nhớ sẵn có là vậy. Trong quá trình chạy thì có những giá trị bị hủy bỏ đang chứa giá trị nhất định. Những ô nhớ đó sẽ được sử dụng lại cho những giá trị sau. Thế là có giá trị rác.
Đối với một số ngôn ngữ bậc cao hơn (Jav, C#…), nó sẽ tự gán giá trị = 0 (hoặc null) khi khai báo.

rogp10 viết 19:59 ngày 01/10/2018

Local thì random còn static với global đều là 0.

C99, 6.7.8 khoản 10 :<

If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static storage duration is not initialized explicitly, then:
— if it has pointer type, it is initialized to a null pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;
— if it is an aggregate, every member is initialized (recursively) according to these rules;
— if it is a union, the first named member is initialized (recursively) according to these rules.

Traullu viết 19:50 ngày 01/10/2018

cái này sẽ phụ thuộc vào biến của bạn khai báo là biến global hay local, bạn có thể check bằng cách thử khai báo hai biến loại này sau đó in ra màn hình để kiểm tra lại kết quả.

Bài liên quan
0