Trong chương trình C++, có đôi lúc chúng ta muốn sao chép nội dung của một mảng vào một mảng khác. Nếu trong các ngôn ngữ lập trình khác, chúng ta có thể đơn giản sử dụng toán tử bằng =
để gán một mảng vào mảng khác theo kiểu arrayA = arrayB
, thì chúng ta lại không thể làm điều đó trong C++ được. Thay vào đó thì chúng ta có 2 phương pháp sao chép mảng trong C++ là sao chép từng phần tử của mảng, hoặc là sử dụng hàm có sẵn là memcpy() trng thư viện chuẩn của C++.
Sao chép từng phần tử của mảng trong C++
Đây là cách copy mảng trong C++ đơn giản và dễ hiểu nhất. Chúng ta tạo một mảng mới, sau đó sử dụng vòng lặp for để lấy và sao chép từng phần tử trong mảng cũ và gán vào mảng mới với index tương đương.
Cụ thể chúng ta viết chương trình sao chép mảng trong C++ như sau:
|
Bạn có thể thấy mảng cũ đã được copy sang mảng mới với các giá trị giống nhau rồi phải không nào.
Tương tự, chúng ta cũng có thể sao chép mảng mảng hai chiều trong C++ với phương pháp trên. Ví dụ:
|
Lại nữa, để tiện sử dụng thì chúng ta cũng có thể tạo một hàm sao chép mảng trong C++ như sau:
|
Sao chép mảng trong C++ | hàm memcpy
Ở phần trên chúng ta đã tự tạo ra một hàm sao chép mảng trong C++ bằng vòng lặp for. Tuy nhiên thì trong C++ cũng đã chuẩn bị sẵn một số hàm trong thư viện chuẩn để giúp chúng ta sao chép mảng trong C++, và một trong số đó là hàm memcpy().
Hàm memcpy() là một hàm có sẵn trong header file string.h, giúp chúng ta copy bộ nhớ trong máy tính. Ứng dụng hàm memcpy vào việc copy mảng, thì thay vì copy mảng chúng ta sẽ copy vùng bộ nhớ chứa mảng ban đầu sang một vùng khác chứa mảng kết quả.
Ôn lại một chút thì hàm memcpy() có cấu trúc như sau:
memcpy (dest_address, src_address, size);
Trong đó dest_address
là con trỏ chỉ vị trí đầu vùng bộ nhớ đích, src_address
là con trỏ chỉ vị trí đầu vùng bộ nhớ nguồn, và size
là kích thước cần copy. Ở đây, dest là viết tắt của destination có nghĩa là điểm đến, còn str là viết tắt của source có nghĩa là nguồn.
Ứng dụng trong trường hợp muốn sao chép mảng trong C++ bằng hàm memcpy thì chúng ta có cú pháp sau đây:
memcpy((void *)dest
, (void *)src
, sizeof(src)
);
Trong đó (void *)dest
là con trỏ chỉ địa chỉ vị trí đầu bộ nhớ chuỗi đích dest
, (void *)src
là con trỏ chỉ chỉ vị trí đầu bộ nhớ chuỗi src
nguồn, và sizeof(src))
là kích thước dữ liệu cần copy từ bộ nhớ chuỗi nguồn src
.
Ví dụ cụ thể:
|
Tổng kết
Trên đây Kiyoshi đã hướng dẫn bạn cách sao chép mảng trong C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.
Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.
URL Link
https://laptrinhcanban.com/cpp/lap-trinh-cpp-co-ban/mang-trong-cpp/sao-chep-mang-trong-cpp/
HOME › lập trình c++ cơ bản dành cho người mới học lập trình>>17. mảng trong c++