Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Mảng nguyên chứa phần tử là số thực

  1. #1
    Ngày gia nhập
    04 2010
    Bài viết
    5

    Wink Mảng nguyên chứa phần tử là số thực

    Các pro cho em hỏi xíu về vấn đề mảng nha, em có đoạn code sau đây:
    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
    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ế.

  2. #2
    Ngày gia nhập
    07 2011
    Bài viết
    160

    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

  3. #3
    Ngày gia nhập
    04 2010
    Bài viết
    5

    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.

  4. #4
    Ngày gia nhập
    07 2011
    Bài viết
    160

    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 )

Các đề tài tương tự

  1. kiểm tra phần tử trong mảng có phải số nguyên tố không
    Gửi bởi thedong91bn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 07-12-2012, 09:18 PM
  2. Bài tập C Viết chương trình khởi tạo giá trị các phần tử là 0 cho mảng một chiều các số nguyên gồm n phần tử.
    Gửi bởi anhtran trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 04-06-2011, 11:36 AM
  3. Bài tập C++ kiêm tra số nguyên dương cho trước có phải toàn số nguyên tố
    Gửi bởi ngoctrungbmt trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 01-01-2011, 09:57 AM
  4. Lập trình C Nhập mảng có n phần tử toàn là các số nguyên dương. Tính tổng các phần tử của mảng!
    Gửi bởi quoccuong1991cltg trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 24-05-2010, 06:10 PM
  5. Bài tập C SX các phần tử số nguyên tố trong mảng giảm dần từ trái qua phải.
    Gửi bởi conrongchautien trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 20-04-2010, 09:37 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn