Mảng trong Ngôn ngữ lập trình C - Bài 8

Mảng trong Ngôn ngữ lập trình C - Bài 8
access_time 10/2/2019 12:00:00 AM
person Lê Đình Thành

Mảng trong Ngôn ngữ Lập trình C

1. Giới thiệu

Một mảng là một nhóm các vị trí bộ nhớ liền kề mà tất cả đều có cùng loại. Để tham chiếu đến một vị trí cụ thể nào đó của mảng, lập trình viên sẽ sử dụng nhiều phương pháp để thực hiện. Phổ thông là thông qua tên mảng và số vị trí của cụ thể của một phần tử trong mảng.

Chung quy lại một mảng có các đặc tính sau :

·       Tất cả các phần tử trong mảng có cùng kiểu dữ liệu

·       Các phần tử được lưu trữ tại các địa chỉ bộ nhớ liền kề nhau.

·       Mỗi phần tử trong mảng được truy vấn thông qua chỉ số phần tử của mảng. Chỉ số mảng có kiểu số nguyên dương.

·       Chỉ số phần tử đầu tiên của mảng có giá trị là 0, chỉ số phần tử thứ n của mảng có giá trị là n-1.

Hình dưới đây mô tả một mảng các số nguyên, tên mảng là c, mảng có chứa 12 phần tử. Bất kỳ phần tử nào trong mảng đều có thể truy vấn thông qua tên mảng và chỉ số của phần tử, chỉ số nằm trong dấu [],


Hình số 1 : Mảng số nguyên có 12 phần tử

Ngôn ngữ lập trình C với dữ liệu mảng phân biệt thành 2 loại đó là mảng một chiều và mảng nhiều chiều.

2 Mảng một chiều

Các phần tử của mảng một chiều được mô tả như một dòng, với số lượng phần tử tương ứng với kích cỡ của mảng khi khai báo. Các địa chỉ lưu trữ các phần tử của mảng được bố trí tuần tự và liên tiếp trên vùng bộ nhớ.

Trong mảng một chiều, nếu số lượng các phần tử là n thì các chỉ số của các phần tử của mảng được đánh số từ 0 (Phần tử đầu tiên) và n-1 (Phần tử thứ n). Ví dụ mảng một chiều có 7 phần tử thì chỉ số của các phần tử sẽ từ 0 đến 6.

2.1 Khai báo mảng

Cú pháp khai báo mảng một chiều rất đơn giản :

Cú pháp
type arrayName[length]; //Khai báo
Mô tả

·       type: Mô tả kiểu dữ liệu.

·       arrayName: Tên mảng hay còn gọi là biến mảng.

·       length: Số lượng các phần tử mảng.

Ví dụ :

int a[10];

·       Mảng dữ liệu có tên là a, mảng này chứa 10 phần tử, mỗi phần tử trong mảng có kiểu int.

Khi lập trình có thể định nghĩa số lượng phần tử mảng thông qua một hằng số.

Ví dụ :

#define N 10

int a[N];

2.2 Định nghĩa mảng và sử dụng cấu trúc lặp để thiết lập giá trị cho các phần tử mảng

Các lập trình viên có thể sử dụng cấu trúc lặp để truy vấn hoặc thiết lập giá trị cho các phần tử của mảng.

Ví dụ: Định nghĩa một mảng số nguyên 5 phần tử, truy vấn đề các phần tử của mảng nguyên và thiết lập giá trị cho các phần tử của mảng đó =  0.


Hình số 2 : Định nghĩa và thiết lập giá trị cho các Phần tử mảng

 

2.2 Thiết lập giá trị mảng thông qua thiết lập giá trị của danh sách tương ứng với mảng

Các giá trị của một mảng có thể được định nghĩa tại thời điểm khai báo hay tại thời điểm khởi tạo thông qua danh sách các giá trị tương tứng. Danh sách các giá trị tương ứng với mảng được định nghĩa thông qua {}, các phần tử được cách nhau bởi dấu phảy.

Ví dụ :

Định nghĩa mảng số nguyên với 5 phần tử, các phần tử này được thiết lập tại thời điểm khai báo mảng.


Hình số 3 : Khởi tạo giá trị của mảng tại thời điểm khai báo mảng

Ngoài ra lập trình viên có thể thiết lập các giá trị của mảng, thông qua việc tính toán với nghiệp vụ cụ thể nào đó.

Ví dụ :

Sử dụng mảng một chiều để lưu trữ 5 số nguyên, các số nguyên tương ứng là 2,4,6,8,10. Lưu ý không thiết lập giá trị thông qua khởi tạo mà sử dụng cấu trúc lặp để thực hiện.


Hình số 4 : Thiết lập và truy vấn dữ liệu mảng

2.3 Sử dụng sizeof với mảng

Sử dụng toán tử sizeof để lấy kích cỡ mảng; Ví dụ ta có mảng : int a[10], có nghĩa là mảng nguyên a, có 10 phần tử, khi đó ta muốn tính toán số lượng các phần tử của mảng a ta làm như sau : sizeof(a)/sizeof(a[0]); ở đây sizeof(a) = 20 (tổng kích cỡ của mảng nguyên 10 phần tử, mỗi phần tử lưu trữ 2 byte trong bộ nhớ ), sizeof(a[0] = 2 (trả về kích cỡ của phần tử đầu tiên của mảng nguyên), vậy 20/2 =10 phần tử.

Ví dụ:

Code mô tả cách thức sử dụng sizeof để tính toán động số lượng phần tử của một mảng.


Hình số 5: Sử dụng sizeof để tính toán kích cỡ mảng

3. Mảng nhiều chiều

Một mảng có thể có chứa nhiều chiều, ở đây chúng ta chỉ quan tâm tới mảng 2 chiều.

Ví dụ:

int a[3][4];

Mảng 2 chiều có kiểu nguyên, với 3 hàng và 4 cột. Hình sau mô tả cấu trúc mảng 2 chiều


Hình số 6: Cấu trúc mảng 2 chiều

Các phần tử trong mảng 2 chiều được truy vấn thông qua chỉ số hàng và cột a[i][j] với i là chỉ số hàng, j là chỉ số cột.

3.1 Khởi tạo giá trị cho mảng 2 chiều

Lập trình viên có thể khởi tạo giá trị cho mảng 2 chiều tại thời điểm khai báo mảng 2 chiều.

Ví dụ : khai báo mảng 2 chiều với 2 hàng và 2 cột. Các giá trị được thiết lập tại thời điểm khởi tạo như sau :

int b[2][2] = {{1, 2}, {3, 4}};

Các giá trị tương ứng sẽ là : b[0][0] = 1; b[0][1] = 2; b[1][0] = 3; b[1][1] = 4;

int c[2][3] = {{1, 2, 3}, {4, 5, 6}};

Các giá trị tương ứng sẽ là : c[0][0] = 1; c[0][1] = 2; c[0][2] = 3; c[1][0] = 4;  c[1][1] = 5; c[1][2] = 6;

Cú pháp khai báo và khởi tạo như sau :

type <arrayName>[rowsize][columesize] = {{value1},{value2}…{value n}};

Mô tả

·       type: Kiểu dữ liệu mảng.

·       arrayName: Tên mảng.

·       rowsize: kích cỡ dòng

·       columesize: kích cỡ cột

·       value1: Tập hợp giá trị của mảng theo cấu trúc mảng 1 chiều.

·       value2: Tập hợp giá trị của mảng theo cấu trúc mảng 1 chiều.

·       value n: Tập hợp giá trị của mảng theo cấu trúc mảng 1 chiều.

3.2 Truy vấn mảng 2 chiều

Để duyệt các phần tử mảng 2 chiều, các lập trình viên có thể sử dụng cấu trúc lặp lồng nhau. (2 vòng lặp for lồng nhau để duyệt. Tuy nhiên có thể sử dụng 1 vòng lặp để duyệt cũng được nhưng sẽ khó hơn).

Code mô tả khởi tạo giá trị mảng 2 chiều và truy vấn các giá trị mảng 2 chiều.


Hình số 7: Khởi tạo  và truy vấn giá trị mảng 2 chiều

 

 

 

 

 

 


vertical_align_top
share
Chat...