0 | 1 | 2 | 3 | 4 |
Như bất kì biến nào khác, một mảng phải được khai báo trước khi có thể sử dụng. Một khai báo điển hình cho một mảng trong C như sau:
type name [elements];
trong đó type là một kiểu dữ liệu hợp lệ (int, float...), name là một tên biến hợp lệ và trường elements chỉ định mảng đó sẽ chứa bao nhiêu phần tử
Vì vậy, để khai báo A như đã trình bày ở trên chúng ta chỉ cần một dòng đơn giản như sau
int A[5];
Chú ý: Trường elements bên trong cặp ngoặc [] phải là một giá trị hằng khi khai báo một mảng, vì mảng là một khối nhớ tĩnh có kích cỡ xác định và trình biên dịch phải có khả năng xác định xem cần bao nhiêu bộ nhớ để cấp phát cho mảng trước khi các lệnh có thể được thực hiện
1.Khởi tạo một mảng
Khi khai báo một mảng với tầm hoạt động địa phương (trong một hàm), theo mặc định nó sẽ không được khởi tạo, vì vậy nội dung của nó là không xác định cho đến khi chúng ra lưu các giá trị lên đó.
Nếu chúng ta khai báo một mảng toàn cục (bên ngoài tất cả các hàm) nó sẽ được khởi tạo và tất cả các phần tử được đặt bằng 0
Nhưng thêm vào đó, khi chúng ta khai báo một mảng, chúng ta có thể gán các giá trị khởi tạo cho từng phần tử của nó. Ví dụ:
int A [5] = { 16, 2, 77, 40, 12071 };
lệnh trên sẽ khai báo một mảng như sau
16
|
2
|
77
|
40
|
12071
|
2.Truy xuất đến các phần tử của mảng
Ở bất kì điểm nào của chương trình trong tầm hoạt động của mảng, chúng ta có thể truy xuất từng phần tử của mảng để đọc hay chỉnh sửa như là đối với một biến bình thường.
Ví dụ, để lưu giá trị 75 vào phần tử thứ ba của billy ta viết như sau:
billy[2] = 75;
và, ví dụ, để gán giá trị của phần tử thứ 3 của billy cho biến a, chúng ta viết
a = billy[2];
Vì vậy, xét về mọi phương diện, biểu thức billy[2] giống như bất kì một biến kiểu int.
Chú ý rằng phần tử thứ ba của billy là billy[2], vì mảng bắt đầu từ chỉ số 0. Vì vậy, phần tử cuối cùng sẽ là billy[4]. Vì vậy nếu chúng ta viết billy[5], chúng ta sẽ truy xuất đến phần tử thứ 6 của mảng và vượt quá giới hạn của mảngTrong C, việc vượt quá giới hạn chỉ số của mảng là hoàn toàn hợp lệ, tuy nhiên nó có thể gây ra những vấn đề thực sự khó phát hiện bởi vì chúng không tạo ra những lỗi trong quá trình dịch nhưng chúng có thể tạo ra những kết quả không mong muốn trong quá trình thực hiện. Nguyên nhân của việc này sẽ được nói đến kĩ hơn khi chúng ta bắt đầu sử dụng con trỏ.
Cần phải nhấn mạnh rằng chúng ta sử dụng cặp ngoặc vuông cho hai tác vụ: đầu tiên là đặt kích thước cho mảng khi khai báo chúng và thứ hai, để chỉ định chỉ số cho một phần tử cụ thể của mảng khi xem xét đến nó
int billy[5]; // khai báo một mảng mới.
billy[2] = 75; // truy xuất đến một phần tử của mảng.
ví dụ về mảng đơn giản như sau:
#include<stdio.h>
#include<conio.h>
int mang[5];
void main()
{
int i;
for (i = 0; i <= 4; i++)
{
printf("nhap phan tu mang[%d]=", i);
scanf_s("%d", &mang[i]);
printf("\n");
}
printf("mang ban da nhap la:\n");
for (i = 0; i <= 4; i++)
{
printf(" %d ", mang[i]);
}
}
#include<stdio.h>
#include<conio.h>
int mang[5];
void main()
{
int i;
for (i = 0; i <= 4; i++)
{
printf("nhap phan tu mang[%d]=", i);
scanf_s("%d", &mang[i]);
printf("\n");
}
printf("mang ban da nhap la:\n");
for (i = 0; i <= 4; i++)
{
printf(" %d ", mang[i]);
}
}