× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

Mảng trong C: Định nghĩa, Ưu điểm, Khai báo, Khởi tạo và hơn thế nữa

30/03/2023 01:24

Mảng trong C có thể được định nghĩa là một phương thức gộp nhiều thực thể có cùng loại thành một nhóm lớn hơn. Tìm hiều về mảng trong C ngay sau đây

Mảng trong C có thể được định nghĩa là một phương thức gộp nhiều thực thể có cùng loại thành một nhóm lớn hơn. Các thực thể hoặc phần tử này có thể thuộc kiểu dữ liệu int, float, char hoặc double hoặc có thể thuộc kiểu dữ liệu do người dùng xác định giống như cấu trúc. Tuy nhiên, để được lưu trữ cùng nhau trong một mảng, tất cả các phần tử phải có cùng kiểu dữ liệu . Các phần tử được lưu trữ từ trái sang phải với chỉ mục ngoài cùng bên trái là chỉ mục thứ 0 và chỉ mục ngoài cùng bên phải là chỉ mục (n-1). 

Mảng trong C có hai loại; Mảng một chiều và mảng nhiều chiều.

  • Mảng một chiều: Mảng một chiều hoặc mảng 1-D là dạng mảng đơn giản nhất có thể tìm thấy trong C. Loại mảng này bao gồm các phần tử có kiểu tương tự và các phần tử này có thể được truy cập thông qua các chỉ số của chúng.
  • Mảng đa chiều: Loại mảng đa chiều phổ biến nhất được sử dụng trong ngôn ngữ C là mảng 2 chiều. Tuy nhiên, số lượng kích thước có thể nhiều hơn 2 tùy thuộc vào trình biên dịch của hệ thống người dùng. Các mảng này bao gồm các phần tử chính là mảng.
  • Tại sao chúng ta cần mảng?

    Nếu chúng ta có ít phần tử, giả sử chúng ta muốn 3 biến, thì chúng ta có thể khai báo chúng riêng biệt như var1, var2 và var3. Nhưng nếu chúng ta có một số lượng lớn các biến thì chúng ta có thể sử dụng mảng để lưu trữ chúng. 

    Hãy để chúng tôi lấy một ví dụ thực tế. Giả sử bạn muốn tạo một chương trình in các chữ số từ 1 đến 100. Bây giờ trong ngôn ngữ C, bạn có thể đạt được điều này bằng 2 phương pháp. Cách đầu tiên là tạo 100 biến và lưu riêng các số từ 1-100 trong các biến đó rồi in từng chữ số. Phương pháp thứ hai là tạo một mảng có kích thước 100 và lưu trữ các số trong mảng đó bằng một vòng lặp. Các chữ số này có thể được in bằng một vòng lặp đơn với độ phức tạp tuyến tính. Rõ ràng là phương thức thứ hai được tối ưu hóa và đáng mong đợi hơn phương thức thứ nhất vì việc lưu trữ các giá trị này trong một mảng sẽ thuận tiện hơn thay vì tạo 100 biến.

    Khai báo và khởi tạo mảng trong C

    Có nhiều cách khác nhau để một mảng có thể được khai báo và khởi tạo theo nhiều cách khác nhau. Bạn có thể khai báo một mảng thuộc bất kỳ kiểu dữ liệu nào (tức là int, float, double, char) trong C. Có thể sử dụng các cách sau để khai báo và khởi tạo một mảng trong C. 

     

    • Khai báo mảng bằng cách chỉ định kích thước

    Mảng có thể được khai báo bằng cách chỉ định kích thước hoặc số lượng phần tử mảng. Kích thước của mảng xác định số phần tử tối đa mà mảng có thể chứa. Trong phiên bản mới nhất của C, bạn có thể khai báo một mảng bằng cách chỉ định kích thước tại thời điểm khai báo hoặc bạn có thể cung cấp kích thước do người dùng chỉ định. Cú pháp sau đây có thể được sử dụng để khai báo một mảng đơn giản bằng cách chỉ định kích thước của nó.

     

  • Khi một mảng được khai báo mà không phân bổ bất kỳ giá trị nào, thì nó sẽ lưu trữ một giá trị rác. Nếu bạn truy cập bất kỳ giá trị mảng chưa được khởi tạo nào, thì giống như bất kỳ biến chưa được khởi tạo nào, nó sẽ cung cấp cho bạn một giá trị rác. 

     

    • Khai báo mảng bằng cách khởi tạo các phần tử

    Một mảng có thể được khởi tạo tại thời điểm khai báo. Trong phương thức khai báo mảng này, trình biên dịch sẽ cấp phát một mảng có kích thước bằng số phần tử của mảng. Cú pháp sau có thể được sử dụng để khai báo và khởi tạo một mảng cùng một lúc.

    // khởi tạo mảng tại thời điểm khai báo.

    int my_array[] = {100, 200, 300, 400, 500}

    Trong cú pháp trên, một mảng gồm 5 phần tử được tạo và mặc dù kích thước mảng chưa được chỉ định ở đây, trình biên dịch sẽ phân bổ kích thước của 5 phần tử số nguyên.

    • Khai báo mảng bằng cách chỉ định kích thước và khởi tạo các phần tử

    Một mảng cũng có thể được tạo bằng cách chỉ định kích thước và gán các phần tử mảng tại thời điểm khai báo. Phương pháp tạo mảng này khác với phương pháp trước. Ở đây, nếu số lượng phần tử được khởi tạo nhỏ hơn kích thước của mảng được chỉ định, thì các phần tử còn lại sẽ tự động được trình biên dịch khởi tạo thành 0. Xem cú pháp sau để hiểu điều này.

    // khai báo một mảng bằng cách chỉ định kích thước và 

    // khởi tạo tại thời điểm khai báo

    int my_array1[5] = {100, 200, 300, 400, 500}; // my_array1 = {100, 200, 300, 400, 500}

    //  

    int my_array2[5] = {100, 200, 300}; // my_array2 = {100, 200, 300, 0, 0}

    Trong cú pháp mảng trên, my_array1 là một mảng có kích thước 5 với tất cả năm phần tử được khởi tạo. Trong khi đó, my_array2 là một mảng có kích thước 5 với chỉ ba phần tử của nó được khởi tạo. Hai phần tử còn lại của mảng thứ hai sẽ được trình biên dịch khởi tạo giá trị 0.

     

    • Khởi tạo mảng bằng vòng lặp

     

    Một mảng cũng có thể được khởi tạo bằng vòng lặp. Vòng lặp lặp từ 0 đến (size - 1) để truy cập tất cả các chỉ số của mảng bắt đầu từ 0. Cú pháp sau đây sử dụng “vòng lặp for” để khởi tạo các phần tử mảng. Đây là cách phổ biến nhất để khởi tạo một mảng trong C.

    // khai báo một mảng.

    int my_array[5];

    // khởi tạo mảng bằng vòng lặp "for".

    int tôi;

    cho(i = 0; i < 5; i++) 

    {

        my_array[i] = 2 * i;

    }

    // my_array = {0, 2, 4, 6, 8}  

    Trong cú pháp trên, một mảng có kích thước 5 được khai báo trước. Sau đó, mảng được khởi tạo bằng vòng lặp for lặp qua mảng bắt đầu từ chỉ số 0 đến (size - 1).

    Hướng dẫn cho người mới bắt đầu để bắt đầu sự nghiệp của bạn với các kỹ năng lập trình C

    Vai trò công việc

    Lương (Trung bình)

    Khóa học cấp chứng chỉ

    Các công ty hàng đầu tuyển dụng

    Nhà phát triển C

    98.000 USD (Mỹ) |

    Rs.10LPA (IND)

    Hướng dẫn cơ bản về C trực tuyến cho người mới bắt đầu

    Tập đoàn BOSCH, Capgemini, Amazon, Microsoft, Accenture, IBM, Meta, Adobe, Apple, Mozilla

    Nhà phát triển phụ trợ

    105.000 USD (Mỹ) |

    Rs.12LPA (IND)

    Hướng dẫn trực tuyến cơ bản về C cho người mới bắt đầu + Giới thiệu về C++

    VISA, JP Morgan, Accenture, Wipro, Freshworks

    Lập trình viên full stack

    180.000 USD (Mỹ) |

    Rs.18LPA (IND)

    Hướng dẫn trực tuyến cơ bản về C cho người mới bắt đầu +  Khóa học phát triển Java Full Stack cho người mới bắt đầu

    Meta, Netflix, Airbnb, Uber, Infosys,Wipro, Zomato, Swiggy, Ola, Paytm, Amazon, Microsoft

    Truy cập các phần tử mảng

    Vì một mảng được lưu trữ liên tục trong bộ nhớ nên nó có các chỉ số bắt đầu từ “0” đến “array_size - 1”, còn được gọi là lập chỉ mục dựa trên số không. Chỉ mục này đại diện cho vị trí trong mảng.

    Các chỉ số mảng được sử dụng để truy cập bất kỳ phần tử nào của mảng theo cách sau:

    tên_mảng[chỉ số]

    Chỉ mục của phần tử được truy cập được chỉ định trong dấu ngoặc vuông “[]”. Phạm vi của chỉ mục là số nguyên trong phạm vi [0, kích thước).

    Ví dụ:

    int my_array[6]; 

    // truy xuất phần tử thứ nhất

    my_array[0] = 100;

    // truy xuất phần tử thứ 4

    my_array[2] = 300;

    // truy cập phần tử cuối cùng

    my_array[5] = 600;

    Các phần tử mảng đầu vào và đầu ra

    Giá trị mảng có thể được lưu trữ bằng cách lấy đầu vào từ người dùng và lưu trữ chúng trong mảng. Ví dụ sau đây minh họa điều này:

    // nhập một phần tử số nguyên và lưu trữ nó 

    // ở vị trí đầu tiên của mảng

    ​scanf("%d", &my_array[0]);

    // nhập một phần tử float và lưu trữ nó 

    // tại vị trí thứ i của mảng

    scanf("%f", &my_array[i-1]);

    Tương tự, các phần tử mảng cũng có thể được hiển thị ở đầu ra bằng phương thức printf(). Chỉ mục được chỉ định cho biết vị trí của phần tử sẽ được in. Ví dụ sau đây minh họa điều này:

    // in phần tử được lưu trữ ở vị trí thứ 1 hoặc chỉ số thứ 0

    printf("%d", my_array[0]);

    // in phần tử được lưu tại vị trí thứ i hoặc chỉ số thứ (i - 1)

    printf("%d", my_array[i-1]);

    Ưu điểm của Array trong C

    Mảng có ý nghĩa rất lớn trong ngôn ngữ C. Chúng cung cấp một số lợi thế cho các lập trình viên trong khi lập trình. Một số trong số họ là:

    • Mảng làm cho mã được tối ưu hóa và rõ ràng hơn vì chúng ta có thể lưu trữ nhiều phần tử trong một mảng cùng một lúc, vì vậy chúng ta không phải viết hoặc khởi tạo chúng nhiều lần.
    • Mỗi phần tử có thể được duyệt qua trong một mảng bằng một vòng lặp.
    • Mảng giúp sắp xếp dễ dàng hơn nhiều. Các yếu tố có thể được sắp xếp bằng cách viết một vài dòng mã.
    • Bất kỳ phần tử mảng nào cũng có thể được truy cập theo bất kỳ thứ tự nào từ phía trước hoặc phía sau trong thời gian O(1).
    • Chèn hoặc xóa các phần tử có thể được thực hiện với độ phức tạp tuyến tính trong một mảng.
    •