Vì a là mảng giá trị nguyên nên khi đưa giá trị vào, 2.5 sẽ bị ép về kiểu nguyên (là 2)
Còn printf "%f" mà chạy với đối số nguyên là sai, ra giá trị lung tung là đúng rồi
Các pro cho em hỏi xíu về vấn đề mảng nha, em có đoạn code sau đây:
Em thắc mắc là tại sao mảng số nguyên lại chấp nhận số dấu chấm động mà không báo lỗi, ngược lại nó lại in ra giá trị 0.000000 như thế.Code:int a[] = {2.5}; printf("Ket qua theo kieu nguyen: %d\n", a[0]); // In ra 2 printf("Ket qua theo kieu dau cham dong: %f", a[0]); //In ra 0.000000
Vì a là mảng giá trị nguyên nên khi đưa giá trị vào, 2.5 sẽ bị ép về kiểu nguyên (là 2)
Còn printf "%f" mà chạy với đối số nguyên là sai, ra giá trị lung tung là đúng rồi
Theo em hiểu, nếu địa chỉ đó chưa được khởi tạo giá trị mới, thì tại địa chỉ ô nhớ đó sẽ chứa một giá trị bất kỳ (giá trị của tính toán trước đó tại địa chỉ đó) hay gọi là giá trị rác, nếu vậy nó sẽ có các giá trị rác khác nhau cho các đối tượng khác nhau, đằng này thì giá trị in ra luôn là 0.000000 cho dù tham chiếu đến vùng nhớ nào đi nữa, mà giá trị này theo em biết hình như là giá trị (địa chỉ 0x0) đầu tiên của một con trỏ rỗng (mới khai báo) khi nó chưa trỏ đến điạ chỉ nào, không biết có phải như vậy không và nó hoạt động như thế nào, mong các pro giúp đỡ.
Đã được chỉnh sửa lần cuối bởi lytieu_long550 : 09-09-2011 lúc 11:35 PM.
Không phải! Ô nhớ a[0] chứa số nguyên (int) có giá trị là 2
Bạn printf("%f", a[0]) là sai, vì dùng %f với 1 biến kiểu int. Và khi lệnh đã sai thì đừng tìm hiểu kết quả là gì!
Có trình biên dịch thông minh (gcc chẳng hạn) sẽ phát hiện ra lỗi sai này và báo lỗi ngay từ lúc dịch
Có trình biên dịch thì không phát hiện ra và dùng ô nhớ ở a[0] như 1 số float. Do cấu trúc của số float khác hoàn toàn với cấu trúc số nguyên nên nó ra giá trị 0. Bạn có thể search thêm về cấu trúc của số float và số int theo từng bit, thì sẽ hiểu tại sao nó ra 0. Nhưng theo mình việc biết cấu trúc của float thế nào đối với đại đa số mọi người là vô ích (Mình đọc mấy lần rồi và cũng đã quên luôn cho đỡ nặng đầu, bất cứ lúc nào thực sự cần dùng đến kiến thức đó thì google là đủ, mà thực tế là chưa khi nào cần)