STDIO
Tìm kiếm gần đây

    Nội dung

    Mảng Nhiều Chiều

    27/04/2015
    16/11/2016
    Mảng nhiều chiều cũng chứa nhiều phần tử, mỗi phần tử lại là một mảng một chiều, các mảng một chiều này có kích thước bằng nhau. Bài viết sẽ hướng dẫn cách khai báo, khởi tạo và một số thao tác với mảng nhiều chiều.

    Giới thiệu

    Khai báo, khởi tạo và một số thao tác với mảng nhiều chiều.

    Tiền đề bài viết

    Bài viết nằm trong chương trình học lập trình cơ bản với ngôn ngữ C++ của Stdio.

    Đối tượng hướng đến

    Bài viết dành cho những người mới bắt đầu làm quen với ngôn ngữ lập trình C++

    Mảng nhiều chiều

    Mảng nhiều chiều là gì?

    Như chúng ta đã biết, mảng một chiều chứa tập hợp nhiều phần tử có cùng kiểu dữ liệu với nhau, tương tự như thế, mảng nhiều chiều cũng chứa nhiều phần tử, mỗi phần tử lại là một mảng một chiều, các mảng một chiều này có kích thước bằng nhau và cũng được truy xuất thông qua một chỉ số - số thứ tự của mảng một chiều đó trong mảng nhiều chiều.

    Ví dụ: Mảng 2 chiều là mảng chứa n phần tử, mỗi phần tử là một mảng một chiều. Mảng 3 chiều sẽ chứa n phần tử, mỗi phần tử là một mảng 2 chiều chứa m mảng một chiều.

    ss_1

    Khi lưu trữ, mảng nhiều chiều được “chuyển đổi” thành mảng một chiều và lưu trên một vùng nhớ liên tục tương tự như mảng một chiều.

    ss_2

    Khai báo mảng nhiều chiều

    Trong C++, mảng nhiều chiều được khai báo như sau:

    kiểu_dữ_liệu	tên_mảng[số_phần_tử_chiều_1][số_phần_tử_chiều_2]...[ số_phần_tử_chiều_n];

    kiểu_dữ_liệu, tên_mảng, số_phần_tử_chiều_x có quy tắc sử dụng tương tự như mảng một chiều là phải là hằng số.

    Ví dụ:

    // Khai báo mảng 2 chiều 3 x 4 kiểu int
    int a[3][4];
    
    // Khai báo mảng 3 chiều 3 x 4 x 5 kiểu float
    float a[3][4][5];

    Khởi tạo giá trị phần tử của mảng nhiều chiều

    Giống như mảng một chiều, ta có thể khởi tạo giá trị cho các phần tử của mảng nhiều chiều ngay khi khai báo. Ví dụ khai báo và khởi tạo mảng hai chiều a như sau:

    int a[3][2] = {6, 4, 5, 9, 0, 7};

    Hoặc khởi tạo theo từng chiều để dễ quản lý như sau:

    int a[3][5] =
    		{
    			{1, 2, 3, 4, 5},
    			{6, 7, 8, 9, 0},
    			{4, 9, 3, 2, 5}
    		};

    Ngoài ra cũng có thể lược bỏ số_phần_tử đầu tiên như sau:

    int a[][5] =
    		{
    			{1, 2, 3, 4, 5},
    			{6, 7, 8, 9, 0},
    			{4, 9, 3, 2, 5}
    		};

    LƯU Ý

    Chỉ được bỏ trống số_phần_tử đầu tiên, nếu không trình biên dịch sẽ không thể nào xác định được kích thước của mảng. Ví dụ khai báo mảng a như sau là không hợp lệ:

    int a[][] =	
    		{
    			{1, 2, 3, 4, 5},
    			{6, 7, 8, 9, 0},
    			{4, 9, 3, 2, 5}
    		};

    Nếu khai báo như trên, mảng sẽ có tổng cộng 8 phần tử int, nhưng trình biên dịch không thể biết được mảng a là 2 x 4, 4 x 2, 1 x 8 hay 8 x 1.

    Chúng ta cũng có thể khởi tạo giá trị mảng nhiều chiều sau khi khai báo bằng cách sử dụng vòng lặp, mảng bao nhiêu chiều thì sẽ có bấy nhiêu vòng lặp lồng vào nhau:

    int a[5][5];
    
    for (i = 0; i < 5; i++)
    {
    	for (j = 0; j < 5; j++)
    	{
    		a[i][j] = value;
    	}
    }

    Truy xuất phần tử

    Để truy xuất phần tử trong mảng nhiều chiều, chúng ta sử dụng lần lượt chỉ số của từng “chiều”. Ví dụ: để truy xuất đến phần tử thuộc hàng 2 cột 3 của mảng hai chiều a, ta sử dụng a[2][3] , Nên nhớ các chỉ số bắt đầu từ 0.

    ss_3

    Sử dụng mảng nhiều chiều là tham số của hàm

    Để khai báo hàm có mảng nhiều chiều là tham số, ta có thể để trống chỉ số đầu tiên nhưng phải cung cấp các chỉ số còn lại của mảng để trình biên dịch có thể biét được mảng đó có kích thước như thế nào. Ví dụ:

    int a[5][5];
    
    void doSomething(int &a[5][5])
    {
    	// ...
    }
    
    doSomething(a);

    Hoặc:

    int a[5][5];
    
    void doSomething(int &a[][5])
    {
    	// ...
    }
    
    doSomething(a);

    Một số vấn đề khác về mảng, bạn đọc xem thêm tại bài viết Sử Dụng Mảng Trong C++ :: www.stdio.vn/articles/read/72/su-dung-mang-trong-c.

    Bài viết liên quan

    Cấp Phát Vùng Nhớ Động - Dùng Như Mảng Hai Chiều

    Trong khuôn khổ bài viết này tôi xin trình bày về một vấn đề cơ bản đó là cấp phát mảng động 2 chiều (hay nhiều chiều). Thật ra là cấp phát vùng nhớ để sử dụng như mảng 2 ...

    Võ Ngọc Điệp11/06/2017

    Mảng 1 Chiều - Mảng 2 Chiều

    Mảng là tập hợp các phần tử có cùng kiểu dữ liệu, được lưu trữ tại các vùng nhớ liên tiếp nhau. Mỗi phần tử sẽ được xác định bằng một số thứ tự tương ứng vị trí của nó ...

    Nguyễn Đăng Khánh31/12/2015

    Các Thao Tác Kinh Điển Với Mảng 2 Chiều Và Ứng Dụng

    Với bài viết "Mảng 1 Chiều – Mảng 2 Chiều" như tôi đã giới thiệu, nhằm giúp các bạn tiếp cận và hiểu hơn về mảng, tôi đưa ra ý tưởng và giúp các bạn xây dựng ứng dụng ...

    Bùi Thị Mỹ Tiên23/05/2017

    Sử Dụng Mảng Trong C++

    Mảng dữ liệu là một tập hợp các phần tử có cùng kiểu dữ liệu và được truy cập thông qua index. Việc vận dụng mảng dữ liệu trong việc học tập và làm việc là điều không thể ...

    Rye Nguyen29/07/2015

    Thao Tác Trên Mảng 1 Chiều

    Sau khi khai báo int a[5]; ta có thể truy xuất đến các phần tử của a qua các chỉ số như a[0], a[1], a[2]... Tuy nhiên, không giống như khi khai báo, các chỉ số ở đây ...

    Phi Phạm26/04/2015

    Kiểu Dữ Liệu Mảng Trong PHP

    Mảng là một loại biến đặc biệt, bao gồm một dãy các ô nhớ có nhiều ô nhớ con cho phép biểu diễn thông tin dưới dạng danh sách trong thực tế. Trong ...

    Nguyễn Thị Trúc Linh20/03/2017

    Sử Dụng Bluetooth Xây Dựng Multiplayer Game Với Unity

    Việc hỗ trợ nhiều người chơi là xu hướng tất yếu hiện nay của nhiều game. Thông thường, những người chơi được kết nối với nhau thông qua mạng Internet hay mạng nội bộ ...

    Bùi Nguyễn Minh Hoàng03/09/2015

    Cơ Bản Về Mã Hóa

    Giả sử con người chưa biết đến mã hóa, một hacker chỉ cần làm một thiết bị lắng nghe và chuyển đổi các gói packet được truyền đi trong mạng và gắng thiết bị này vào cáp ...

    Hoàng Tiến Đạt03/12/2014

    Con Trỏ Mảng Và Mảng Các Con Trỏ

    Con trỏ mảng và mảng các con trỏ là hai khái niệm quan trọng trong C++

    Nguyễn Minh Hiếu25/07/2015

    Làm Quen Với SQL Server

    Database là nơi tạo, cập nhật và lưu trữ các thông tin của một hệ thống. Nếu không có database, sẽ không có thế giới thông tin, không có cộng đồng mạng hay bất cứ hoạt ...

    Rye Nguyen30/07/2015

    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    [email protected]

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020