Điều này khai báo một mảng với kích thước được chỉ định, được đặt tên là tên biến, thuộc loại tên_kiểu. Mảng được lập chỉ mục từ 0 đến size-1. Kích thước [trong ngoặc] phải là một số nguyên hoặc một biến cố định. Trình biên dịch sử dụng kích thước để xác định lượng không gian cần phân bổ [i. e. bao nhiêu byte]
ví dụ
int list[30]; // an array of 30 integers char name[20]; // an array of 20 characters double nums[50]; // an array of 50 decimals int table[5][10]; // a two dimensional array of integers
Ví dụ cuối cùng minh họa một mảng hai chiều [mà chúng ta thường nghĩ về nó như một bảng]. Chúng tôi thường nghĩ kích thước đầu tiên là hàng và kích thước thứ hai là cột, nhưng điều đó thực sự không quan trọng, miễn là bạn nhất quán. Vì vậy, chúng ta có thể coi phần khai báo cuối cùng là một bảng có 5 hàng và 10 cột chẳng hạn
Khởi tạo mảng
Với các biến thông thường, chúng ta có thể khai báo trên một dòng, sau đó khởi tạo ở dòng tiếp theo.int x; x = 0;
Hoặc, chúng ta có thể chỉ cần khởi tạo biến trong chính câu lệnh khai báo
int x = 0;
Chúng ta có thể làm tương tự cho mảng không? . Chỉ cần liệt kê các giá trị mảng [chữ] trong ký hiệu tập hợp { } sau khi khai báo. Dưới đây là một số ví dụ
int list[4] = {2, 4, 6, 8}; char letters[5] = {'a', 'e', 'i', 'o', 'u'}; double numbers[3] = {3.45, 2.39, 9.1}; int table[3][2] = {{2, 5} , {3,1} , {4,9}};
chuỗi kiểu C
Mảng kiểu char là trường hợp đặc biệt- Chúng tôi sử dụng chuỗi thường xuyên, nhưng không có loại chuỗi tích hợp sẵn trong ngôn ngữ
- Chuỗi kiểu C được triển khai dưới dạng một mảng kiểu char kết thúc bằng một ký tự đặc biệt, được gọi là "ký tự null"
- Ký tự null có giá trị ASCII 0
- Ký tự null có thể được viết dưới dạng ký tự bằng mã theo cách này. '\0'
- Mỗi chuỗi ký tự [một cái gì đó trong dấu ngoặc kép] hoàn toàn chứa ký tự null ở cuối
Vì các mảng ký tự được sử dụng để lưu trữ các chuỗi kiểu C, nên bạn có thể khởi tạo một mảng ký tự bằng một chuỗi ký tự [i. e. một chuỗi trong dấu ngoặc kép], miễn là bạn chừa chỗ cho ký tự null trong khoảng trống được phân bổ
char name[7] = "Johnny";
Lưu ý rằng điều này sẽ tương đương với
char name[7] = {'J', 'o', 'h', 'n', 'n', 'y', '\0'};
Các biến thể trong khởi tạo
Khai báo mảng phải chứa thông tin về kích thước của mảng. Có thể để kích thước ngoài [ ] trong khai báo miễn là bạn khởi tạo mảng nội dòng, trong trường hợp đó, mảng được tạo vừa đủ lớn để thu thập dữ liệu đã khởi tạo. ví dụ
char name[] = "Johnny"; // size is 7 int list[] = {1, 3, 5, 7, 9}; // size is 5
Một lối tắt khác với bộ khởi tạo là sử dụng ít phần tử hơn kích thước chỉ định. Các phần tử còn lại sẽ mặc định là 0. Việc sử dụng một tập hợp chứa nhiều phần tử hơn kích thước được phân bổ là bất hợp pháp
int list[5] = {1, 2}; // array is {1, 2, 0, 0, 0} int nums[3] = {1, 2, 3, 4}; // illegal declaration.
Ghi chú. Sử dụng bộ khởi tạo trong khai báo, như trong các ví dụ trên, có lẽ sẽ không được như mong muốn với các mảng rất lớn.
Một cách phổ biến khác để khởi tạo mảng -- với vòng lặp for.
Ví dụ này khởi tạo mảng numList thành {0, 2, 4, 6, 8, 10, 12, 14, 16, 18}.
int numList[10]; int i; for [i = 0; i < 10; i++] numList[i] = i * 2;
Sử dụng mảng
Khi các mảng của bạn được khai báo, bạn truy cập các phần tử trong một mảng với tên mảng và số chỉ mục bên trong dấu ngoặc [ ]. Nếu một mảng được khai báo là. typeName varName[size], thì phần tử có chỉ số n được gọi là varName[n]. ví dụ.int list[30]; // an array of 30 integers char name[20]; // an array of 20 characters double nums[50]; // an array of 50 decimals int table[5][10]; // a two dimensional array of integers0
Tuy nhiên, sẽ không thích hợp nếu sử dụng chỉ mục mảng nằm ngoài giới hạn của chỉ mục mảng hợp lệ
int list[30]; // an array of 30 integers char name[20]; // an array of 20 characters double nums[50]; // an array of 50 decimals int table[5][10]; // a two dimensional array of integers1
Tuyên bố trên là cú pháp pháp lý, tuy nhiên. Công việc của lập trình viên là đảm bảo rằng các chỉ số ngoài giới hạn không được sử dụng. Đừng trông đợi vào trình biên dịch để kiểm tra nó cho bạn -- nó sẽ không
Sao chép mảng
Nếu chúng ta có hai mảng này, làm cách nào để sao chép nội dung của list2 sang list1?int list[30]; // an array of 30 integers char name[20]; // an array of 20 characters double nums[50]; // an array of 50 decimals int table[5][10]; // a two dimensional array of integers2
Với các biến, chúng tôi sử dụng câu lệnh gán, vì vậy đây sẽ là xu hướng tự nhiên -- nhưng điều đó là sai
int list[30]; // an array of 30 integers char name[20]; // an array of 20 characters double nums[50]; // an array of 50 decimals int table[5][10]; // a two dimensional array of integers3
Chúng ta phải sao chép giữa các phần tử của mảng theo phần tử. Tuy nhiên, vòng lặp for giúp việc này trở nên dễ dàng
int list[30]; // an array of 30 integers char name[20]; // an array of 20 characters double nums[50]; // an array of 50 decimals int table[5][10]; // a two dimensional array of integers4
I/O đơn giản với chuỗi.
Trong trường hợp đặc biệt của chuỗi [mảng ký tự kết thúc null], chúng có thể được sử dụng như mảng bình thường. Truy cập một phần tử mảng có nghĩa là truy cập một ký tự.int list[30]; // an array of 30 integers char name[20]; // an array of 20 characters double nums[50]; // an array of 50 decimals int table[5][10]; // a two dimensional array of integers5
Chuỗi cũng có thể là đầu ra và đầu vào toàn bộ, với các đối tượng đầu vào và đầu ra tiêu chuẩn [cin và cout].
Dòng sau xuất ra từ "Xin chào".
int list[30]; // an array of 30 integers char name[20]; // an array of 20 characters double nums[50]; // an array of 50 decimals int table[5][10]; // a two dimensional array of integers6Hãy cẩn thận chỉ sử dụng điều này trên các mảng char đang được sử dụng làm chuỗi kiểu C. [Điều này có nghĩa là, chỉ khi ký tự null xuất hiện dưới dạng dấu kết thúc]
Dòng sau đây cho phép nhập một từ [tối đa 19 ký tự và ký tự null kết thúc] từ bàn phím, từ này được lưu trữ trong mảng word1
int list[30]; // an array of 30 integers char name[20]; // an array of 20 characters double nums[50]; // an array of 50 decimals int table[5][10]; // a two dimensional array of integers7
Các ký tự được đọc từ bàn phím cho đến khi bắt gặp ký tự "khoảng trắng" [dấu cách, tab, dòng mới, v.v.] đầu tiên. Đầu vào được lưu trữ trong mảng ký tự và ký tự null được tự động thêm vào