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

    Nội dung

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

    26/04/2015
    16/11/2016
    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 không nhất thiết phải là giá trị hằng số mà có thể là giá trị của biến, giá trị của hàm... Bài viết sẽ hướng dẫn các thao tác trên mảng một chiều.

    Giới thiệu

    Một số thao tác cơ bản trên mảng 1 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++

    Truy xuất phần tử mảng

    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 không nhất thiết phải là giá trị hằng số mà có thể là giá trị của biến, giá trị của hàm... miễn sao với giá trị này ta có thể xác định được một phần tử trong mảng.

    Ví dụ

     #include <iostream>
    using namespace std;
    
    int add(int a, int b)
    {
           return a + b;
    }
    
    int main()
    {
           int a[3];
           int b = 1;
           a[0] = 0;
           a[b] = 1;
           a[add(b, b)] = 2;
    }

    Lưu ý

    Việc truy xuất tới các phần tử không thuộc mảng – trong ví dụ này là a[3], a[4]... thường thì trình biên dịch và chương trình khi chay sẽ không báo lỗi, nhưng việc này sẽ vô cùng nguy hiểm khi có dữ liệu quan trọng hoặc làm việc với con trỏ và gây ra các lỗi về vùng nhớ. Vì thế chúng ta nên luyện tập thói quen quản lý tốt chỉ số khi thao tác trên mảng.

    Xuất mảng ra màn hình

    Đầu tiên, chúng ta thử sử dụng cout:    

    #include <iostream>
    using namespace std;
    
    int main()
    {
           int a[3] = {1, 2, 3};
           cout << a;
    }

    Kết quả nhận được không phải là dãy số 1 2 3 như mong đợi. Nếu chúng ta chỉ sử dụng a mà không kèm theo chỉ số, thì đây sẽ là địa chỉ  của mảng a. Vấn đề này được nói rõ hơn ở bài viết Pointer Trong C++ :: www.stdio.vn/articles/read/29/pointer-trong-c.

    Như vậy, để xuất một mảng ra màn hình, ta bắt buộc phải truy xuất đến từng phần tử của mảng và xuất ra màn hình lần lượt từng phần tử. Để làm ddiefu này ta có thể sử dụng vòng lặp:

    #include <iostream>
    using namespace std;
    
    int main()
    {
           int a[3] = {1, 2, 3};
    
           for (int i = 0; i < 3; i++)
           {
                  cout << a[i] << endl;
           }
    }

    Sao chép mảng

    Giả sử ta có mảng int a[3] = {1, 2, 3}; và ta muốn tạo một mảng nữa, giống hệt mảng này. Đầu tiên, ta thử sử dụng toán tử =

    #include <iostream>
    using namespace std;
    
    int main()
    {
           int a[3] = { 1, 2, 3 };
           int b[3];
    
           b = a;  // Bao loi
    }

    Phép gán b = a sẽ báo lỗi, như đã nói ở trên, a và b ở đây mang giá trị là địa chỉ của mảng a và mảng b, phép gán này làm thay đổi địa chỉ của mảng b nên phát sinh ra lỗi vì một khi đã được cấp phát thì địa chỉ của một biến không thể thay đổi được nữa.

    Như vậy, để sao chép một mảng chúng ta cũng phải sao chép từng phân tử của mảng tương tự như việc xuất mảng ra màn hình bằng cách sử dụng vòng lặp:

    #include <iostream>
    using namespace std;
    
    int main()
    {
           int a[3] = { 1, 2, 3 };
           int b[3];
    
           for (int i = 0; i < 3; i++)
           {
                  b[i] = a[i];
           }
    }

    Truyền mảng vào hàm

    Khi truyền mảng vào hàm, ta cũng làm tương tự như khi truyền một biến, nhưng phải kèm thêm một tham số chứa số phần tử của mảng để quản lý việc truy xuất các phần tử của mảng trong hàm.

    #include <iostream>
    using namespace std;
    
    void printArray(int a[], int size)
    {
           for (int i = 0; i < size; i++)
           {
                  cout << a[i] << endl;
           }
    }
    
    int main()
    {
           int a[3] = { 1, 2, 3 };
           printArray(a, 3);
    }

    Chèn và xóa các phần tử mảng

    Thực chất, một khi mảng đã được khai báo, tức là vị trí và kích thước của nó trên vùng nhớ đã được xác định, chúng ta không thể nào thay đổi được nữa. Vì thế việc chèn thêm và xóa bớt số lượng phần tử của mảng trên vùng nhớ là không thể làm được. Tuy nhiên, với thao tác xóa bớt số phần tử mảng, ta có thể chủ động giảm giá trị biến quản lý số lượng phần tử của mảng:

    #include <iostream>
    using namespace std;
    
    int main()
    {
           int a[3] = { 1, 2, 3 };
           int size = 3;
    
           for (int i = 0; i < size; i++)
           {
                  cout << a[i] << endl;
           }
    
           size--;
    
           for (int i = 0; i < size; i++)
           {
                  cout << a[i] << endl;
           }
    }

    Việc này thực ra không mang nhiều ý nghĩa, vì phần tử của mảng đơn giản là không được xuất ra hoặc đôi khi là mang giá trị khác đi nhưng nó vẫn nằm trên vùng nhớ đó, vẫn thuộc quyền quản lý của mảng.

    Tương tự, để tăng số phần tử của mảng, ta tăng giá trị biến quản lý số lượng phần tử của mảng. Nhưng việc này còn nhiều nguy cơ hơn xóa phần tử của mảng vì có thể gây tác động đến dữ liệu khác hoặc gây các lỗi về vùng nhớ. 

    Bài viết liên quan

    Mảng Nhiều Chiều

    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 ...

    Phi Phạm27/04/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

    Danh Sách Liên Kết Đơn

    Cơ bản về danh sách liên kết trong C/C++, bao gồm mô tả, giải thuật và code mẫu. Danh sách liên kết là 1 cấu trúc dữ liệu cơ bản, được sử dụng để khắc phục hạn chế của ...

    Trung Nguyễn24/09/2014

    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 Với MySQL Database Sử Dụng MySQLi Extension Trong PHP

    Việc thao tác với database trong quá trình phát triển và bảo trì website là công việc thường xuyên đối với những lập trình viên. Với mỗi database được tích hợp trong ...

    Nguyễn Nghĩa07/11/2015

    Thao Tác Với Chuỗi Trong C/C++

    Khái niệm chuỗi ký tự do con người đặt ra để thuận tiện trong việc sử dụng. Có thể hiểu đơn giản, chuỗi là tập hợp các ký tự được lưu trữ liên tiếp trong vùng nhớ máy ...

    Rye Nguyen28/07/2015

    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

    Định Dạng Ảnh Bitmap - Giới Thiệu Và Các Thao Tác Cơ Bản

    Trong đời thường, bạn sẽ gặp các file ảnh có định dạng .PNG, .JPG, .TGA, .BMP,...Với những lập trình viên đặc biệt là trong lập trình games, đồ họa,... cũng sẽ phải ...

    Phan Tấn Phúc13/09/2017

    GameObject - Thao Tác Với C# Script

    GameObject là một khái niệm cơ bản trong Unity. Mọi đối tượng trong game được hiển thị trong cửa sổ Hierarchy đều là các GameObject. Các loại đối tượng khác nhau sẽ có ...

    Rye Nguyen08/08/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