0 k thích
165 đã xem
trong Kiến thức CNPM bởi (1.2k điểm)

Chào thầy cô, anh chị và các bạn. Em có thắc mắc

Ví dụ như có hàm và cấu trúc như sau


http://codepad.org/exV5BT2d

Trong hàm main có khai mảng HocSinh mangHocSinh[100]. Vậy khi gọi hàm InMaSo() thì làm sao để chỉ truyền toàn bộ phần MaHocSinh của mangHocSinh.

Em cám ơn nhiều!

1 Câu trả lời

+1 thích
bởi (3.2k điểm)

câu trả lời là không được nhé bạn, một mảng kiểu HocSinh không thể chuyển thành mảng kiểu int được, vậy sao bạn không viết thêm một hàm tương tự nhỉ:

void InMaHocSinh(HocSinh mangHocSinh[100],int _iN)
{
    for(int i=0;i<_iN;i++)
    {
        printf("%d",mangHocSinh[i].MaHocSinh);
    }
}
bởi (1.2k điểm)
Em làm vậy rồi, nhưng em muốn hàm viết ra độc lập hơn, dùng lại được mà không cần sửa lại hàm có sẵn.
bởi (4.8k điểm)
"độc lập hơn"? Bạn có thể đưa ra một ví dụ cụ thể cần cái đó đi, chứ trong trường hợp này, câu trả lời của bạn ấy hoàn toàn phù hợp.
bởi (1.2k điểm)
Tức là mình dùng lại mà không sửa lại hàm void InMaHocSinh(int _maHocSinh[100], int _iN) và em muốn chỉ truyền những MaHocSinh trong struct mangHocSinh vào thôi.
bởi (4.8k điểm)
Tại sao bạn muốn như thế? Giả sử điều bạn nói là làm được thì trong trường hợp CỤ THỂ nào thì thể hiện sự ưu điểm so với câu trả lời này? Đó là điều mình muốn hỏi.
bởi (3.2k điểm) 1 vi phạm
tại sao bạn lại muốn như vậy nhỉ, mình không thể hiểu được, không phải lúc nào tận dụng lại hàm có sẵn đều tốt đâu, đằng này trong trường hợp này là không thể, mình giải thích thêm 1 chút nhé:
một biến HocSinh có 2 thuộc tính là MaHocSinh và Ten thì tất nhiên trong bộ nhớ nó sẽ phải lưu liên tục MaHocSinh rồi đến Ten, suy ra một mảng học sinh thì sẽ gồm một dãy bộ nhớ liên lục lưu thông tin của các học sinh, mà khi đó, mỗi ô nhớ lưu mã học sinh của mỗi học sinh sẽ bị ngăn cách bởi các ô nhớ lưu tên học sinh, đại khái là ( m là mã, t là tên): m1 t1 m2 t2 m3 t3, trong khi đó một mảng các mã học sinh thì đòi hỏi các ô nhớ lưu mã học sinh phải liên tục, tức là m1 m2 m3 ..., vậy nên không thể đưa các ô nhớ lưu mã học sinh trong mảng các học sinh vào một tham số có kiểu là một mảng các mã học sinh được, chỉ có 2 cách:
- cách thứ 1: copy các mã học sinh trong mảng các học sinh vào 1 mảng int các mã học sinh, rồi truyền vào hàm của bạn, nhưng cách này chẳng ai dùng đâu :3
- cách thứ 2: là cách mà mình đã trả lời trên đó, viết thêm 1 hàm hỗ trợ cho bài toán của bạn, rất gọn gàng, nhanh chóng
không biết bạn có hiểu giải thích của mình ở trên không nhỉ :))
bởi (1.2k điểm)
Em hiểu giải thích trên, giờ anh giải thích rõ hơn thì em hiểu rồi, em cám ơn.
bởi (4.8k điểm)
Nhưng bạn có thể chia sẻ tại sao bạn lại muốn như vậy không? Nếu giả sử như điều đó làm được.
bởi (1.2k điểm)
Giả sử khi có sẵn một hàm phức tạp, tương đối lớn đảm nhận 1 chức năng riêng, khi sửa lại để xử lý riêng cho các struct(giả sử có nhiều struct khác nhau cùng dùng hàm này) sẽ làm chương trình nặng hơn nhiều.
bởi (4.8k điểm)
Trong trường hợp đó thì có thể dùng hàm trong câu trả lời kết hợp với template để xử lý các struct/class khác nhau. Tuy nhiên, code bạn đưa chả có gì cần nhu cầu ấy cả, và trường hợp bạn vừa đưa cũng không cụ thể và liên quan gì đến code gốc nữa.
Chào mừng đến với Q&A FIT. Bạn có thể đặt câu hỏi và nhận được câu trả lời từ các bộ phận hỗ trợ và những thành viên khác tại Khoa Công nghệ Thông tin, Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia TP.HCM. Bạn hãy đăng nhập bằng tài khoản Google để gửi hoặc trả lời các câu hỏi.
...