Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 20 kết quả

Đề tài: Giá trị ban đầu khi khởi tạo Struct

  1. #1
    Ngày gia nhập
    12 2016
    Bài viết
    0

    Mặc định Giá trị ban đầu khi khởi tạo Struct

    Mình đang không hiểu vấn đề này
    ví dụ
    struct sinhvien{
    int masv;
    int diem;
    }SV;

    SV A[5];
    Vậy khi chưa gán hay nhập giá trị thì giá trị của A[0].masv là gì ???

  2. #2
    Ngày gia nhập
    01 2013
    Bài viết
    1,418

    Khoan nói đến kiểu biến thì ý bạn chắc là để cho dễ debug. Ngay từ đầu thì bạn chọn giá trị mặc định rồi khởi tạo luôn là vừa, số càng nổi bật càng tốt.

  3. #3
    Ngày gia nhập
    12 2016
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi prog10 Xem bài viết
    Khoan nói đến kiểu biến thì ý bạn chắc là để cho dễ debug. Ngay từ đầu thì bạn chọn giá trị mặc định rồi khởi tạo luôn là vừa, số càng nổi bật càng tốt.
    ví dụ nếu như mình khai báo mảng A[5] với kiểu int,thì mặc định giá trị của A[0],A[1],..A[4] đều bằng 0 nếu như mình chưa gán hay nhập giá trị mới cho chúng,nhưng khi mảng A[] lưu struct thì A[0].x lại không được mặc định là 0 !!!

  4. #4
    Ngày gia nhập
    01 2013
    Bài viết
    1,418

    Trích dẫn Nguyên bản được gửi bởi myN myD Xem bài viết
    ví dụ nếu như mình khai báo mảng A[5] với kiểu int,thì mặc định giá trị của A[0],A[1],..A[4] đều bằng 0 nếu như mình chưa gán hay nhập giá trị mới cho chúng,nhưng khi mảng A[] lưu struct thì A[0].x lại không được mặc định là 0 !!!
    Chỉ có static int [sửa: và global int] mới chắc chắn bằng 0 thôi, còn lại muốn bằng mấy chả được, đó là lí do cho post #2
    Đã được chỉnh sửa lần cuối bởi prog10 : 24-12-2016 lúc 04:56 PM.

  5. #5
    Ngày gia nhập
    12 2016
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi prog10 Xem bài viết
    Chỉ có static int mới chắc chắn bằng 0 thôi, còn lại muốn bằng mấy chả được, đó là lí do cho post #2
    ok thanks bạn nha

  6. #6
    Ngày gia nhập
    09 2016
    Bài viết
    1,032

    Mặc định Giá trị ban đầu khi khởi tạo Struct

    Trích dẫn Nguyên bản được gửi bởi myN myD Xem bài viết
    ví dụ nếu như mình khai báo mảng A[5] với kiểu int,thì mặc định giá trị của A[0],A[1],..A[4] đều bằng 0 nếu như mình chưa gán hay nhập giá trị mới cho chúng,nhưng khi mảng A[] lưu struct thì A[0].x lại không được mặc định là 0 !!!
    Bạn nghe ai nói hay đọc sách nào nói về nó ? Bạn đã kiểm chứng nó chưa (trình biên dịch nào, version nào ) ?

    Phọt mô xa 2016

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

    Trích dẫn Nguyên bản được gửi bởi myN myD Xem bài viết
    ví dụ nếu như mình khai báo mảng A[5] với kiểu int,thì mặc định giá trị của A[0],A[1],..A[4] đều bằng 0 nếu như mình chưa gán hay nhập giá trị mới cho chúng,nhưng khi mảng A[] lưu struct thì A[0].x lại không được mặc định là 0 !!!
    Theo như mình biết thì khi chưa khởi tạo giá trị (gán giá trị) thì biến đó sẽ giữ giá trị rác. Trong bài tập này thì MSSV sẽ giữ giá trị rác chứ không phải là bằng 0. THẬT NGUY HIỂM

  8. #8
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    666

    Không thấy bạn nào nói rõ về vị trí của biến, nên mình thêm một chút.

    Biến cấu trúc thì cũng là một biến, trong C thì :
    Mọi biến toàn cục và biến static mặc nhiên được khởi tạo về 0
    Các biến được khai báo trong cặp dấu ngoặc nhọn "{}" nếu không có bổ từ static thì nó nằm trên ngăn xếp - giá trị bắt đầu vào block là không xác định.

    Vì vậy câu hỏi của bạn phải xác định phạm vi khai báo biến.

    Cần phải biết rõ nơi khai báo của nó trong tổng thể.
    Yêu mã hơn yêu em !!!

  9. #9
    Ngày gia nhập
    09 2016
    Bài viết
    1,032

    assA.cpp file
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. struct sinhvien{
    5.     int masv;
    6.     int diem;
    7. } A[5];
    8.  
    9. int main() {
    10.     for(int i=0; i<5; i++) cout << A[i].masv << endl;
    11. }
    biên dịch với vc++:
    cl assA.cpp

    assB.cpp file
    C Code:
    1. #include <stdio.h>
    2.  
    3. struct sinhvien{
    4.     int masv;
    5.     int diem;
    6. } A[5];
    7.  
    8. int main() {
    9.     for(int i=0; i<5; i++) //cout << A[i].masv;
    10.         printf("%d\n", A[i].masv);
    11. }
    biên dịch với Borland c, chuyển Assembly để so sánh:
    bcc32 -S assB.cpp
    bcc32 assB.asm

    Minh hoạ
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		_ass.jpg
Lần xem:	8
Size:		46.9 KB
ID:		51250



    Phọt mô xa 2016

  10. #10
    Ngày gia nhập
    12 2016
    Bài viết
    0

    Mình mới học C mà,nên lắm cái ngố

Tags của đề tài này

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