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

Đề tài: Mọi người cho mình hỏi về mảng nhiều chiều

  1. #1
    Ngày gia nhập
    07 2018
    Bài viết
    7

    Mặc định Mọi người cho mình hỏi về mảng nhiều chiều

    - Mình thấy bảo có mảng nhiều chiều (từ 3 trở lên thì phải), mình thấy người ta tạo như sau:
    Code:
    int mang3chieu[5][6][7];
    - Mình tạo thử ko bị lỗi nhưng mình muốn đưa nó vào chương trình con:
    Code:
    void Mang3Chieu(Var);
    - Với Var là vị trí để khai báo mảng 3 chiều (hoặc hơn) cho chương trình con.
    - Với Var thông thường:
    Code:
    void mang (int Var);
    - Với Var 1 chiều:
    Code:
    void mang (int* Var);
    - Còn từ 2 chiều trở đi mình không biết ghi gì vào đó. Mong mọi người chỉ giúp

  2. #2
    Ngày gia nhập
    02 2016
    Bài viết
    305

    C có thể dùng nguyên tắc khoảng cách từ phần tử đầu tiên để lấy phần tử khác theo chỉ số.
    Đại khái cách làm việc của toán tử [] là: a[n] tức là phần tử cách phần tử đầu tiên a[0] n phần tử.

    C coi như mảng 2 chiều là dòng này nối tiếp dòng kia. Như vậy, để tính vị trí của một phần tử ở dòng i thì C cần biết mỗi dòng có bao nhiêu cột.

    Nắm vững nguyên tắc như vậy thì sẽ biết cách dễ nhất để khai báo prototype là:
    - Chiều đầu tiên của mảng không cần khai báo.
    - Các chiều còn lại thì phải khai báo.

    void mang(int Var[][100]); // prototype cho hàm nhận mảng 2 chiều, 100 cột, bao nhiêu dòng cũng được (nếu code chạy quá số dòng thì ráng chịu)

  3. #3
    Ngày gia nhập
    07 2018
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi NguNhuheo Xem bài viết
    C có thể dùng nguyên tắc khoảng cách từ phần tử đầu tiên để lấy phần tử khác theo chỉ số.
    Đại khái cách làm việc của toán tử [] là: a[n] tức là phần tử cách phần tử đầu tiên a[0] n phần tử.

    C coi như mảng 2 chiều là dòng này nối tiếp dòng kia. Như vậy, để tính vị trí của một phần tử ở dòng i thì C cần biết mỗi dòng có bao nhiêu cột.

    Nắm vững nguyên tắc như vậy thì sẽ biết cách dễ nhất để khai báo prototype là:
    - Chiều đầu tiên của mảng không cần khai báo.
    - Các chiều còn lại thì phải khai báo.

    void mang(int Var[][100]); // prototype cho hàm nhận mảng 2 chiều, 100 cột, bao nhiêu dòng cũng được (nếu code chạy quá số dòng thì ráng chịu)
    - OK tks bạn.
    - Vây trong trường hợp mình muốn để kiểu trả về thì với vd trên ta thay void bằng int được không

  4. #4
    Ngày gia nhập
    02 2016
    Bài viết
    305

    Trích dẫn Nguyên bản được gửi bởi tkdlbhvn Xem bài viết
    - OK tks bạn.
    - Vây trong trường hợp mình muốn để kiểu trả về thì với vd trên ta thay void bằng int được không
    Tôi không nói chuyện với ngừoi Việt bằng tiếng Tây U.
    Quý vị chịu khó chờ ngừoi khác trả lời.

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

    Trích dẫn Nguyên bản được gửi bởi NguNhuheo Xem bài viết
    Tôi không nói chuyện với ngừoi Việt bằng tiếng Tây U.
    Quý vị chịu khó chờ ngừoi khác trả lời.
    - nhưng câu hỏi thì mình ghi bằng tiếng việt đúng không?

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

    Mặc định Mọi người cho mình hỏi về mảng nhiều chiều

    Trả về thì cũng có thể như:
    int * CreateMyArray(int cCount); // 1 chiều
    int ** CreateMyArray(int cRows, int cCol); // 2 chiều
    ..................
    Nhưng kiểu thiết kế này không nên được khuyến khích bởi lý do là bên trong thân hàm thường dùng cấp phát động, do đó nếu nơi gọi hàm không giải phóng bộ nhớ thì có thể dẫn đến tình trạng thiếu hụt bộ nhớ. Thứ hai là kích thước các chiều không được tường minh, dễ gây sai sót khi duyệt mảng. Chính vì lẽ đó mà C++ đã giải quyết bằng cách đưa ra các lớp tổng quát như List, Array, Vector...

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