14/08/2018, 12:34

Mảng (Array) trong C/C++

Ngôn ngữ lập trình C/C++ cung cấp cấu trúc dữ liệu gọi là mảng , được lưu trữ trong một tập hợp các dữ liệu cùng kiểu với độ dài cố định. Một mảng được sử dụng để lưu trữ tập hợp dữ liệu, nhưng nó rất hữu dụng nếu bạn nghĩ về một mảng các biến với cùng một kiểu. Thay vì khai báo biến một ...

Ngôn ngữ lập trình C/C++ cung cấp cấu trúc dữ liệu gọi là mảng, được lưu trữ trong một tập hợp các dữ liệu cùng kiểu với độ dài cố định. Một mảng được sử dụng để lưu trữ tập hợp dữ liệu, nhưng nó rất hữu dụng nếu bạn nghĩ về một mảng các biến với cùng một kiểu.

Thay vì khai báo biến một cách rời rạc, như biến so0, so1,… và so99, bạn có thể khai báo một mảng các giá trị như so[0], so[1] và … so[99] để biểu diễn các giá trị riêng biệt. Một thành viên cụ thể của mảng có thể được truy cập qua index (chỉ số).

Tất cả mảng đều bao gồm các vị trí nhớ liền kề nhau. Địa chỉ thấp nhất tương ứng với thành viên đầu tiền và địa chỉ cao nhất tương ứng với thành viên cuối cùng của mảng.

Khai báo mảng trong C/C++

Để khai báo một mảng trong ngôn ngữ C/C++, bạn xác định kiểu của biến và số lượng các phần tử được yêu cầu bởi biến đó như sau:

Kieu Ten_mang [ Kich_co_mang ];

Đây là mảng một chiều. Kich_co_mang phải là một số nguyên lớn hơn 0 và Kieu phải hợp lệ trong ngôn ngữ C/C++. Ví dụ, khai báo một mảng 10 phần tử gọi là balance với kiểu double, sử dụng câu lệnh sau đây:

char sinhvien[10];

Khởi tạo mảng trong C/C++

Bạn có thể khởi tạo mảng trong C/C++ hoặc từng phần tử một hoặc sử dụng một câu lệnh như dưới đây:

int hanghoa[5] = {45, 34, 29, 67, 49};

Số lượng các giá trị trong dấu ngoặc kép {} không được lớn hơn số lượng phần tử khai báo trong dấu ngoặc vuông [].

Nếu bạn bỏ sót kích cỡ mảng thì mảng đó đủ lớn để giữ các giá trị được khởi tạo: Bạn sẽ tạo chính xác một chuỗi có giá trị giống hệt chuỗi bên trên bằng cách gán từng phần tử một. Dưới đây là một ví dụ khi gán giá trị cho một phần tử của mảng:

int hanghoa[] = {45, 34, 29, 67, 49};

Bạn có thể tạo ra cùng một mảng giống như đã làm trong ví dụ trước.

hanghoa[4] = 50;

Câu lệnh bên trên gán giá trị thứ 5 của mảng giá trị 50.0. Tất cả các mảng đều có chỉ số (index) đầu tiên bằng 0, đây được gọi là chỉ số cơ bản và phần tử cuối cùng của mảng có chỉ số bằng độ lớn của mảng trừ đi 1. Dưới đây là cách biểu diễn hình họa cho chuỗi khai báo bên trên thông qua chỉ số:

Biểu diễn mảng trong C/C++

Truy cập các phần tử mảng trong C/C++

Một mảng được truy cập bởi cách đánh chỉ số trong tên của mảng. Dưới đây là một cách truy cập một giá trị của mảng:

int hocphi = hocphik60[55];

Câu lệnh trên lấy phần tử thứ 56 của mảng và gán giá trị này cho biến hocphi. Dưới đây là một ví dụ về việc sử dụng với tất cả mô tả bên trên:

#include <iostream>
using namespace std;
 
#include <iomanip>
using std::setw;
 
int main ()
{
   int n[ 10 ]; // n la mot mang gom 10 so nguyen
 
   // khoi tao gia tri cac phan tu cua mang n la 0          
   for ( int i = 0; i < 10; i++ )
   {
      n[ i ] = i + 100; // thiet lap phan tu tai vi tri i la i + 100
   }
   cout << "Phan tu thu:" << setw( 13 ) << "Gia tri la:" << endl;
 
   // hien thi gia tri cua moi phan tu                     
   for ( int j = 0; j < 10; j++ )
   {
      cout << setw( 7 )<< j << setw( 13 ) << n[ j ] << endl;
   }
 
   return 0;
}

Chương trình này sử dụng hàm setw(so_nguyen) trong C/C++ để định dạng output. Tại đây, tham số so_nguyen là một số chỉ độ rộng của kết quả mà bạn muốn hiển thị. Chẳng hạn, với so_nguyen là 3 tức là bạn dành 3 vị trí để in kết quả, nếu kết quả cần hiển thị là thừa thì nó sẽ bị cắt bớt, nếu thiếu thì chèn thêm khoảng trống vào. Hàm setw() được dùng cho cả cout và cin.

Chạy chương trình C/C++ trên sẽ cho kết quả như hình sau:

Mảng trong C/C++

Chi tiết về mảng trong C/C++

Mảng là một phần rất quan trọng trong ngôn ngữ C/C++. Dưới đây là những định nghĩa quan trọng liên quan đến một mảng cụ thể mà được trình bày rõ ràng hơn cho các lập trình viên C/C++:

Khái niệmMiêu tả

Mảng đa chiều trong C/C++

C/C++ hỗ trợ các mảng đa chiều. Mẫu đơn giản nhất của mảng này là mảng hai chiều

Con trỏ tới một mảng trong C/C++

Bạn có thể trỏ tới phần tử đầu tiên của mảng một cách đơn giản chỉ bởi xác định tên mảng đó, chứ không phải một chỉ số

Truyền mảng tới hàm như là tham số trong C/C++

Bạn có thể truyền tới hàm một điểm trỏ chỉ tới một mảng bởi xác định tên mảng chứ không phải là một chỉ số

Trả về mảng từ hàm trong C/C++

C/C++ cho phép một hàm có thể trả về một mảng

0