Ghép nối mảng trong C | Laptrinhcanban.com

Ghép nối mảng trong C

Khi lập trình C, có đôi lúc chúng ta muốn ghép nối hoặc trộn gộp 2 mảng thành 1 mảng trong 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ử cộng + để ghép (nối, trộn, gộp) một mảng vào mảng khác theo kiểu arrayC = 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 sẽ phải tự tạo ra hàm trộn 2 mảng thành 1 mảng trong c bằng cách ứng dụng hàm memcpy() trong thư viện chuẩn của C.

Ghép 2 mảng trong C

Ghép 2 mảng trong C, hay còn gọi là nối 2 mảng trong C, trộn 2 mảng thành 1 mảng trong C, gộp 2 mảng thành 1 mảng trong C… là xử lý nhằm gán toàn bộ các phần tử của một mảng vào cuối của một mảng khác.

Ghép 2 mảng trong C

Khác với các ngôn ngữ lập trình khác thì mảng trong C có kích thước cố định được quyết định khi khai báo mảng, do đó để ghép nối 1 mảng vào mảng khác trong C, chúng ta cần chú ý mảng đích có đủ độ dài để chứa hết cả 2 mảng hay không. Nếu không đủ độ dài mà chúng ta vẫn cố ghép mảng, hệ quả là sự cố tràn màn hình có thể bị xảy ra.

Tuy nhiên cũng còn một cách khác hữu hiệu hơn, đó chính là thay vì ghép mảng 1 vào mảng 2 và lo lắng về kích thước có đủ chỗ không, thì chúng ta chuẩn bị sẵn một mảng thứ 3, và ghép 2 mảng ban đầu vào nó.

Và thay vì thao tác ghép nối trộn gộp và copy kết quả trong các mảng này, chúng ta sẽ thao tác trực tiếp với vùng bộ nhớ chứa chúng. Chúng ta cần hàm memcpy() trong C để làm được điều này.

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 ghép nối trộn gộp 2 mảng với nhau, thì thay vì thao tác với 2 mảng chúng ta sẽ copy lần lượt vùng bộ nhớ chứa 2 mảng này vào một vùng bộ nhớ thứ 3 để lưu 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.

Và chúng ta viết chương trình ghép mảng trong C như sau:

#include <stdio.h>
#include <string.h>

int main(void){
int array1[] = {1,2,3};
int array2[] = {4,5};

/*Tìm kích thước và chiều dài của các mảng cần ghép*/
int size1 = sizeof array1, length1 = sizeof array1/ sizeof(int);
int size2 = sizeof array2, length2 = sizeof array2/ sizeof(int);


/* Khai báo mảng kết quả với độ dài đủ để chứa 2 mảng trên*/
int result[length1 + length2];

/* Copy mảng đầu tiên vào mảng kết quả*/
memcpy(result,array1,size1);

/* Copy mảng thứ 2 vào vị trí cuối mảng 1 trong mảng kết quả*/
memcpy(&result[length1],array2,size2);


/*Kiểm tra kết quả ghép nối mảng*/
for(short i = 0; i < 5; i++) {
printf("%d ", result[i]);
}
}
//> 1 2 3 4 5

Bạn có thể thấy chuỗi 2 đã được ghép vào chuỗi cuối chuỗi 1 và hoàn thành phép ghép nối trộn gộp mảng trong C như trên.

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách ghép nối 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.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.