30/09/2018, 19:11
Có cách nào để không làm thay đổi giá trị của mảng khi truyền lên Hàm?
Chào các bạn,
giống như tiêu đề, mình thắc mắc không biết có cách nào làm được như vậy không(trong c/c++).??
Cảm ơn.
Bài liên quan
Dùng cách này đảm bảo được việc nếu giá trị trong mảng bị thay đổi thì chắc chắn không phải do hàm foo gây ra.
Nó bị báo lỗi bạn à, chỗ a[0] = 4;
Bạn copy tham số đầu vào ra một mảng khác rồi xử lí trên mảng copy thôi!!
Cách tốt nhất là bạn không thay đổi giá trị của phần tử trong hàm
Nó báo lỗi vì mình đang cố thay đổi giá trị của mảng trong hàm.
P/s: Sao nhiều người không chịu đọc thông tin lỗi vậy nhỉ?
nhưng mà nếu mảng có quá nhiều phần tử thì copy lâu lắm bạn à. Mình muốn tìm hiểu xem có cách nào nhanh hơn copy không.
Câu trả lời đơn giản cho bạn là không có cách nào cả.
Trong C/C++ khi bạn truyền 1 mảng vào 1 hàm, thì tương đương với việc bạn truyền vào 1 con trỏ (trở tới địa chỉ đầu tiên của mảng) vào hàm -> khi giá trị của mảng được thay đổi trong hàm -> thoát khỏi hàm thì mảng cũng thay đổi theo.
Bạn không muốn thay đổi thì bắt buộc phải truyền vào const array thôi, còn muốn truyền vào thay đổi ở trong không thay đổi ở ngoài thì bắt buộc phải copy qua mảng khác.
cho cái code cụ thể khi nào cần làm vậy đi. Chỉ có 2 cách 1 là truyền const reference 2 là truyền bản copy. Truyền const ref thì ko chỉnh sửa được a[i] trong hàm f, chỉ đọc a[i] được thôi.
ko có cách nào mà bản truyền vào có thể bị chỉnh sửa trong khi bản chính ko thay đổi mà bản truyền vào ko phải là bản copy hết đó