Khai báo mảng
Trong C để khai báo một mảng ta sử dụng cú pháp khai báo sau:
kiểu_dữ_liệu tên_mảng [kích_thước_mảng];
Trong đó kiểu_dữ_liệu là kiểu dữ liệu của các phần tử trong mảng. tên_mảng là tên của mảng. kích_thứớc_mảng cho biết số phần tử trong mảng.
Ví dụ:
int mang_nguyen[10]; // khai báo mảng 10 phần tử có kiểu dữ liệu int
float mang_thuc[4]; // khai báo mảng 4 phần tử có kiểu dữ liệu float
char mang_ki_tu[6]; // khai báo mảng 6 phần tử có kiểu dữ liệu char
Trong ví dụ trên, mảng mang_nguyen được lưu trữ trên 20 ô nhớ (mỗi ô nhớ có kích thước 1 byte, 2 ô nhớ kích thước là 2 byte lưu trữ được một số nguyên kiểu int)
liên tiếp nhau. Do C đánh số các phần tử của mảng bắt đầu từ 0 nên phần tử thứ i của mảng sẽ có chỉ số là i-1 và do vậy sẽ có tên là mang_nguyen[i-1]. Ví dụ: phần tử thứ nhất của mảng là mang_nguyen[0], phần tử thứ 2 là mang_nguyen[1], phần tử thứ 5 là mang_nguyen[4]…
mang_nguyen[0] mang_nguyen[1] ... ... mang_nguyen[9]
Kích thước của mảng bằng kích thước một phần tử nhân với số phần
Đểtruy nhập vào một phần tử của mảng thông qua tên của nó. Tên một phần tử của mảng được tạo thành từ tên mảng và theo sau là chỉ số của phần tử đó trong mảng được đặt trong cặp dấu ngoặc vuông
tên_mảng[chỉ_số_của_phần_tử]
Ví dụ với khai báo
int mang_nguyen[3];
Thì mang_nguyen[0] sẽ là phần tử thứ nhất của mảng mang_nguyen[1] sẽ là phần tử thứ 2 của mảng
mang_nguyen[2] sẽ là phần tử thứ 3 của mảng Với mảng nhiều chiều như
int a[6][5];
thì a[0] là phần tử đầu tiên của một mảng, phần tử này bản thân nó lại là một mảng một chiều. Phần tử đầu tiên của mảng một chiều a[0] sẽ là a[0][0]. Phần tử tiếp theo của a[0] sẽ là a[0][1]… Và dễ dàng tính được a[2][3] sẽ là phần tử thứ 4 của phần tử thứ 3 của a.
Một cách tổng quát a[i][j] sẽ là phần tử thứ j+1 của a[i], mà phần tử a[i] lại là phần tử thứ i+1 của a.
5.1.2.1. Khai báo mảng 1 chiều
Cú pháp
Kiểu_mảng tên_mảng [ số_phần_tử];
Trong đó:
- Kiểu_mảng: đây là kiểu của mảng, là tên một kiểu dữ liệu đã tồn tại, có thể là kiểu chuẩn hoặc kiểu dữ liệu do người lập trình định nghĩa .
- tên_mảng : là tên của mảng, do người lập trình đặt, theo quy tắc về tên của C
- số_phần_tử : là hằng (hoặc biểu thức hằng) nguyên, dương là số phần tử của mảng.
Ví dụ:
int vector [15]; // tên mảng: vector, có 15 phần tử, kiểu int
float MT[10], D[20]; // có hai mảng kiểu float: MT có 10 phần tử, D có 20 phần
tử
char * s[30]; // s là mảng có 30 phần tử kiểu char * (mảng các con trỏ)
Khi gặp (dòng lệnh) định nghĩa một mảng, chương trình dịch sẽ cấp phát một vùng nhớ (lên tiếp) cho đủ các phần tử liên tiếp của mảng, ví dụ vector[15] sẽ được cấp phát một vùng nhớ có kích thước 15*sizeof(int) =30 byte
5.1.2.2. Khai báo mảng 2 chiều
Mảng hai chiều có thể hiểu như bảng gồm các dòng các cột, các phần tử thuộc cùng một kiểu dữ liệu nào đó. Mảng hai chiều được định nghĩa như sau.
Cú pháp
Kiểu_mảng tên_mảng [sd][sc];
Trong đó:
- Kiểu_mảng: đây là kiểu của mảng, là tên một kiểu dữ liệu đã tồn tại, có thể là kiểu chuẩn hoặc kiểu dữ liệu do người lập trình định nghĩa.
- tên_mảng : là tên của mảng, do người lập trình đặt, theo quy tắc về tên của C.
- sd, sc : là hằng (hoặc biểu thức hằng) nguyên, dương tương ứng là số dòng và số cột mảng, số phần tử của mảng sẽ là sd*sc.
Ví dụ:
int a[2][5]; // a là mảng số nguyên có 2 dòng, 5 cột (có 10 phần tử)
float D[3][10]; // D là mảng số thực có 3 dòng, 10 cột (có 30 phần
tử) char DS[5][30]; // DS là mảng kí tự có 5 dòng, 30 cột
Khi gặp một định nghĩa mảng, chương trình dịch sẽ cấp phát một vùng nhớ liên tiếp có kích thước là sd*sc*sizeof (Kiểu_mảng)cho mảng.
Có thể coi mảng 2 chiều n dòng, m cột là mảng 1 chiểu có n phần tử, mỗi phần tử lại là 1 mảng một chiều có m phần tử (mảng của mảng). Ví dụ với float D[3][10] có
thể xem D là mảng có 3 phần tử D[0], D[1], D[2], mỗi phần tử này là mảng có 10 phần tử.