Mảng trong C ++ - Khai báo - Khởi tạo - Ví dụ về con trỏ đến mảng

Mục lục:

Anonim

Mảng là gì?

Mảng là một cấu trúc dữ liệu lưu trữ tuần tự một phần tử của cùng một kiểu dữ liệu. Mảng C ++ có kích thước cố định.

Bạn có thể xem một mảng là tập hợp các biến có kiểu dữ liệu tương tự. Thay vì khai báo từng biến và gán giá trị riêng lẻ, bạn có thể khai báo một biến (mảng) và thêm giá trị của các biến khác nhau vào đó. Mỗi giá trị được thêm vào mảng được xác định bởi một chỉ mục.

Trong hướng dẫn C ++ này, bạn sẽ học:

  • Mảng là gì?
  • Tại sao chúng ta cần mảng?
  • Khai báo một mảng trong C ++
  • Khởi tạo mảng
  • Các loại mảng
    • Mảng một chiều
    • Mảng đa chiều
    • Mảng hai chiều
    • Ba-Mảng mẫu
    • Con trỏ đến một mảng
  • Truy cập các giá trị của một mảng
  • Ưu điểm của Mảng trong C ++
  • Nhược điểm của một mảng trong C ++

Tại sao chúng ta cần mảng?

Mảng rất quan trọng trong bất kỳ ngôn ngữ lập trình nào. Chúng cung cấp một cách thuận tiện hơn để lưu trữ các biến hoặc tập hợp dữ liệu có cùng kiểu dữ liệu với nhau thay vì lưu trữ chúng riêng lẻ. Mỗi giá trị của mảng sẽ được truy cập riêng biệt.

Khai báo một mảng trong C ++

Khai báo mảng trong C ++ liên quan đến việc nêu kiểu cũng như số lượng phần tử sẽ được lưu trữ bởi mảng. Cú pháp:

type array-Name [ array-Size ];

Quy tắc khai báo mảng một chiều trong C ++.

  • Kiểu: Kiểu là kiểu của các phần tử sẽ được lưu trữ trong mảng và nó phải là kiểu dữ liệu C ++ hợp lệ.
  • Array-Name: Tên- mảng là tên được gán cho mảng.
  • Kích thước mảng : Kích thước mảng là số phần tử được lưu trữ trong mảng. Nó phải là một số nguyên và lớn hơn 0.

Ví dụ: bạn có thể tạo một mảng có tên age và lưu trữ độ tuổi của 5 học sinh như sau:

int age[5];

Độ tuổi của mảng sẽ lưu trữ 5 số nguyên đại diện cho độ tuổi của các học sinh khác nhau.

Khởi tạo mảng

Khởi tạo mảng là quá trình gán / lưu trữ các phần tử vào một mảng. Việc khởi tạo có thể được thực hiện trong một câu lệnh đơn lẻ hoặc từng câu lệnh một. Lưu ý rằng phần tử đầu tiên trong mảng được lưu trữ ở chỉ số 0, trong khi phần tử cuối cùng được lưu trữ ở chỉ số n-1, trong đó n là tổng số phần tử trong mảng.

Trong trường hợp của mảng tuổi, phần tử đầu tiên sẽ được lưu trữ ở chỉ số 0, trong khi phần tử cuối cùng sẽ được lưu trữ ở chỉ số 4.

Hãy để chúng tôi sử dụng mảng tuổi để chứng minh cách khởi tạo mảng có thể được thực hiện:

int age[5] = {19, 18, 21, 20, 17};

Tổng số phần tử trong {} không được vượt quá giá trị được nêu trong []. Phần tử 19 ở chỉ số 0, 18 ở chỉ số 1, 21 ở chỉ số 2, 20 ở chỉ số 3 và 17 ở chỉ số 4. Nếu bạn không nêu số lượng phần tử sẽ được lưu trữ trong mảng bên trong [], mảng sẽ chỉ đủ lớn để chứa các phần tử được thêm vào bên trong {}. Ví dụ:

int age[] = {19, 18, 21, 20, 17};

Câu lệnh trên sẽ tạo chính xác cùng một mảng với câu lệnh trước đó. Bạn cũng có thể gán một phần tử cho một mảng bằng cách sử dụng chỉ mục của nó. Ví dụ:

age[3] = 20;

Câu lệnh trên sẽ lưu giá trị 20 tại chỉ số 3 của mảng có tên age. Điều này có nghĩa là 20 sẽ là phần tử thứ 4 của mảng.

Các loại mảng

Có hai loại mảng C ++:

  • Mảng một chiều
  • Mảng đa chiều
  • Con trỏ đến một mảng

Mảng một chiều

Đây là một mảng trong đó các mục dữ liệu được sắp xếp tuyến tính chỉ theo một chiều. Nó thường được gọi là mảng 1-D. Cú pháp:

datatype array-name[size];
  • Tên mảng là tên của mảng.
  • Kích thước là số lượng mục sẽ được lưu trữ trong mảng.

Ví dụ:

#include using namespace std;int main(){int age[5] = { 19, 18, 21, 20, 17 };for (int x = 0; x < 5; x++){cout <

Đầu ra:

Đây là ảnh chụp màn hình của mã:

Giải thích mã:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi. Nó sẽ cho phép chúng tôi đọc và ghi vào bảng điều khiển.
  2. Bao gồm không gian tên std để sử dụng các lớp và chức năng của nó mà không cần gọi nó.
  3. Gọi hàm main () bên trong mà logic của chương trình sẽ được thêm vào.
  4. Bắt đầu phần thân của hàm main ().
  5. Khai báo mảng có tên age để lưu trữ 5 số nguyên. 5 số nguyên cũng đã được khởi tạo.
  6. Tạo một biến số nguyên x bằng vòng lặp for.
  7. Phần đầu của phần nội dung của vòng lặp for.
  8. Sử dụng biến vòng lặp x để lặp lại các giá trị của tuổi mảng và in chúng trên bảng điều khiển. "\ N" là một ký tự dòng mới và in ra một dòng mới sau mỗi lần lặp lại.
  9. Cuối phần thân của vòng lặp for.
  10. Cuối phần thân của hàm main ().

Mảng đa chiều

Đây là một mảng trong đó các mục dữ liệu được sắp xếp để tạo thành một mảng các mảng. Mảng nhiều chiều có thể có bất kỳ số kích thước nào, nhưng mảng hai chiều và ba chiều là phổ biến. Cú pháp:

datatype array-name[d1][d2][d3]… [dn];

Tên mảng là tên của mảng sẽ có n kích thước. Ví dụ:

Mảng hai chiều

Mảng 2D lưu trữ dữ liệu trong danh sách với mảng 1-D. Nó là một ma trận với các hàng và cột. Để khai báo một mảng 2D, hãy sử dụng cú pháp sau:

type array-Name [ x ][ y ];

Kiểu phải là kiểu dữ liệu C ++ hợp lệ. Xem mảng 2D dưới dạng bảng, trong đó x biểu thị số hàng trong khi y biểu thị số cột. Điều này có nghĩa là bạn xác định từng phần tử trong một mảng 2D bằng cách sử dụng dạng a [x] [y], trong đó x là số hàng và y là số cột chứa phần tử đó.

Dưới đây là một ví dụ về cách khởi tạo một mảng 2D:

int a[2][3] = {{0, 2, 1} , /* row at index 0 */{4, 3, 7} , /* row at index 1 */};

Trong ví dụ trên, chúng ta có một mảng 2D có thể được xem như là một ma trận 2x3. Có 2 hàng và 3 cột. Phần tử 0 có thể được truy cập dưới dạng [0] [1] vì nó nằm ở giao điểm của hàng được lập chỉ mục 0 và cột được lập chỉ mục 1. Phần tử 3 có thể được truy cập dưới dạng [1] [2] vì nó nằm ở giao điểm của hàng được lập chỉ mục 1 và cột được lập chỉ mục 2.

Lưu ý rằng chúng tôi chỉ cần thêm dấu ngoặc nhọn để phân biệt các hàng khác nhau của phần tử. Quá trình khởi tạo cũng có thể được thực hiện như sau:

int a[2][3] = {0, 2, 1, 4, 3, 7};};

Ví dụ C ++ sau đây trình bày cách khởi tạo và duyệt qua một mảng 2D:

#include using namespace std;int main(){// a 2x3 arrayint a[3][2] = { {0, 2}, {1, 4}, {3, 7} };// traverse array elementsfor (int i=0; i<3; i++)for (int j=0; j<2; j++){cout << "a[" <

Đầu ra:

Đây là ảnh chụp màn hình của đoạn mã trên:

Giải thích mã:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi. Nó sẽ cho phép chúng tôi đọc và ghi vào bảng điều khiển.
  2. Bao gồm không gian tên std để sử dụng các lớp và chức năng của nó mà không cần gọi nó.
  3. Gọi hàm main () trong đó mã sẽ được thêm vào.
  4. Bắt đầu phần thân của hàm main ().
  5. Một lời bình luận. Trình biên dịch C ++ sẽ bỏ qua điều này.
  6. Khai báo mảng 2D gồm 3 hàng và 2 cột. Các mục cũng đã được thêm vào mảng.
  7. Một lời bình luận. Trình biên dịch C ++ sẽ bỏ qua điều này.
  8. Tạo một biến i bằng vòng lặp for. Biến này sẽ lặp qua các chỉ mục hàng của mảng.
  9. Tạo biến j bằng vòng lặp for. Biến này sẽ lặp qua các chỉ mục cột của mảng.
  10. Bắt đầu của phần thân của các vòng lặp.
  11. In giá trị của các biến i và j trên bảng điều khiển bên trong dấu ngoặc vuông trên bảng điều khiển.
  12. In ra giá trị được lưu tại chỉ mục [i] [j] của mảng a.
  13. Cuối phần thân của các vòng dây.
  14. Hàm main () sẽ trả về một giá trị nguyên nếu chương trình chạy tốt.
  15. Cuối phần thân của hàm main ().

Ba-Mảng mẫu

Mảng 3D là một mảng của các mảng. Mỗi phần tử trong mảng 3D được xác định bởi một bộ 3 chỉ mục. Để truy cập các phần tử của mảng 3D, chúng tôi sử dụng ba vòng lặp for. Ví dụ:

#includeusing namespace std;void main(){int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}};cout << "a[0][1][0] = " << a[0][1][0] << "\n";cout << "a[0][1][1] = " << a[0][1][1] << "\n";}

Đầu ra:

Đây là ảnh chụp màn hình của mã:

Giải thích mã:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi. Nó sẽ cho phép chúng tôi đọc và ghi vào bảng điều khiển.
  2. Bao gồm không gian tên std để sử dụng các lớp và chức năng của nó mà không cần gọi nó.
  3. Gọi hàm main () bên trong mà logic của chương trình sẽ được thêm vào.
  4. Bắt đầu phần nội dung của hàm main ().
  5. Khai báo mảng 3D có tên là kích thước 2x3x2. Các giá trị của mảng cũng đã được khởi tạo.
  6. Truy cập mục được lưu trữ tại chỉ mục [0] [1] [0] của mảng và in nó trên bảng điều khiển.
  7. Truy cập mục được lưu trữ tại chỉ mục [0] [1] [1] của mảng và in nó trên bảng điều khiển.
  8. Cuối phần thân của hàm main ().

Con trỏ đến một mảng

Con trỏ là một biến chứa một địa chỉ. Khác với việc sử dụng một con trỏ để lưu trữ địa chỉ của một biến, chúng ta có thể sử dụng nó để lưu trữ địa chỉ của một ô mảng. Tên của một mảng liên tục trỏ đến phần tử đầu tiên của nó. Hãy xem xét khai báo dưới đây:

int age[5];

Tuổi là một con trỏ đến $ age [0], địa chỉ của phần tử đầu tiên của một mảng có tên là age. Hãy xem xét ví dụ sau:

#include using namespace std;int main(){int *john;int age[5] = { 19, 18, 21, 20, 17 };john = age;cout << john << "\n";cout << *john;}

Đầu ra:

Lưu ý rằng giá trị đầu tiên của đầu ra ở trên có thể trả về một giá trị khác tùy thuộc vào địa chỉ được gán cho phần tử đầu tiên của mảng trong bộ nhớ máy tính của bạn.

Đây là ảnh chụp màn hình của mã:

Giải thích mã:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi. Nó sẽ cho phép chúng tôi đọc và ghi vào bảng điều khiển.
  2. Bao gồm không gian tên std để sử dụng các lớp và chức năng của nó mà không cần gọi nó.
  3. Gọi hàm main () bên trong mà logic của chương trình sẽ được thêm vào.
  4. Bắt đầu phần nội dung của hàm main ().
  5. Khai báo một biến con trỏ có tên là * john.
  6. Khai báo mảng số nguyên có tên age để lưu trữ 5 số nguyên. Giá trị của các số nguyên cũng đã được khởi tạo.
  7. Gán cho biến john giá trị địa chỉ của mục được lưu trong chỉ mục đầu tiên của tuổi mảng.
  8. In giá trị của biến john, là địa chỉ của mục được lưu trong chỉ mục đầu tiên của tuổi mảng.
  9. In giá trị đầu tiên được lưu trữ trong độ tuổi của mảng.
  10. Cuối phần thân của hàm main ().

Tên mảng có thể được sử dụng làm con trỏ hằng và ngược lại cũng đúng. Điều này có nghĩa là bạn có thể truy cập giá trị được lưu trữ ở chỉ mục 3 của độ tuổi mảng với * (tuổi + 3). Ví dụ:

#include using namespace std;int main() {// an array of 5 elements.int age[5] = { 19, 18, 21, 20, 17 };int *p;p = age;// output array valuescout << "Using pointer: " << endl;for (int x=0; x<5; x++) {cout << "*(p + " << x << ") : ";cout << *(p + x) << endl;}cout << "Using age as address: " << endl;for (int x = 0; x < 5; x++) {cout << "*(age + " << x << ") : ";cout << *(age + x) << endl;}return 0;}

Đầu ra:

Đây là ảnh chụp màn hình của mã:

Giải thích mã:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi. Nó sẽ cho phép chúng tôi đọc và ghi vào bảng điều khiển.
  2. Bao gồm không gian tên std để sử dụng các lớp và chức năng của nó mà không cần gọi nó.
  3. Gọi hàm main () và bắt đầu phần thân của hàm main ().
  4. Một lời bình luận. Trình biên dịch C ++ sẽ bỏ qua điều này.
  5. Khai báo mảng có tên age để lưu trữ 5 số nguyên.
  6. Tạo một con trỏ số nguyên p.
  7. Gán cho p giá trị địa chỉ của phần tử đầu tiên của độ tuổi mảng.
  8. Một lời bình luận. Trình biên dịch C ++ sẽ bỏ qua điều này.
  9. In ra một số văn bản trên bảng điều khiển.
  10. Tạo số nguyên x bằng vòng lặp for. Dấu {đánh dấu phần bắt đầu của phần thân của vòng lặp for.
  11. In ra các giá trị của x kết hợp với một số văn bản khác trên bảng điều khiển.
  12. In ra các giá trị của * (p + x) trên bảng điều khiển.
  13. Cuối phần thân của vòng lặp for.
  14. In ra một số văn bản trên bảng điều khiển.
  15. Tạo biến x bằng vòng lặp for. Dấu {đánh dấu phần bắt đầu của phần thân của vòng lặp for.
  16. In ra các giá trị của x từ 0 đến 4 cùng với một số văn bản khác.
  17. In ra các giá trị của * (age + x).
  18. Cuối phần thân của vòng lặp for.
  19. Trả về giá trị nếu chương trình chạy thành công.
  20. Cuối phần thân của hàm main ().

Truy cập các giá trị của một mảng

Các phần tử của một mảng được truy cập bằng cách sử dụng các chỉ mục tương ứng của chúng. Chỉ mục của phần tử được truy cập được thêm vào trong dấu ngoặc vuông [] ngay sau tên mảng. Ví dụ:

int john = age[2];

Trong ví dụ trên, chúng tôi chỉ đơn giản nói rằng tuổi của john được lưu trữ ở chỉ mục 2 của mảng có tên là tuổi. Điều này có nghĩa là tuổi của john là giá trị thứ 3 trong độ tuổi của mảng. Dưới đây là một ví dụ C ++ hoàn chỉnh cho thấy cách truy cập và in ra giá trị này:

#includeusing namespace std;int main(){int age[5] = { 19, 18, 21, 20, 17 };int john = age[2];cout << "The age of John is:"<

Đầu ra:

Đây là ảnh chụp màn hình của mã:

Giải thích mã:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi. Nó sẽ cho phép chúng tôi đọc và ghi vào bảng điều khiển.
  2. Bao gồm không gian tên std để sử dụng các lớp và chức năng của nó mà không cần gọi nó.
  3. Gọi hàm main () trong đó mã sẽ được thêm vào.
  4. Bắt đầu phần nội dung của hàm main ().
  5. Khai báo mảng có tên age để lưu trữ 5 phần tử nguyên.
  6. Truy cập giá trị được lưu trữ ở chỉ mục 2 của độ tuổi mảng và lưu trữ giá trị của nó trong một biến có tên john.
  7. In giá trị của biến john trên bảng điều khiển cùng với văn bản khác.

Ưu điểm của Mảng trong C ++

Dưới đây là ưu / lợi ích của việc sử dụng Mảng trong C ++:

  • Các phần tử của mảng có thể được duyệt qua một cách dễ dàng.
  • Dễ dàng thao tác với dữ liệu mảng.
  • Các phần tử của mảng có thể được truy cập một cách ngẫu nhiên.
  • Mảng tạo điều kiện tối ưu hóa mã; do đó, chúng ta có thể thực hiện nhiều công việc bằng cách sử dụng ít mã hơn.
  • Dễ dàng sắp xếp dữ liệu mảng.

Nhược điểm của một mảng trong C ++

  • Một mảng có kích thước cố định; do đó, chúng ta không thể thêm các phần tử mới vào nó sau khi khởi tạo.
  • Việc phân bổ nhiều bộ nhớ hơn yêu cầu dẫn đến lãng phí không gian bộ nhớ và việc phân bổ ít bộ nhớ hơn có thể gây ra vấn đề.
  • Số phần tử được lưu trữ trong một mảng phải được biết trước.

Tóm lược

  • Mảng là một cấu trúc dữ liệu lưu trữ các phần tử của cùng một kiểu dữ liệu.
  • Các phần tử của mảng được lưu trữ tuần tự.
  • Các phần tử mảng được biểu thị bằng cách sử dụng các chỉ mục tương ứng của chúng. Phần tử đầu tiên ở chỉ số 0, trong khi phần tử cuối cùng ở chỉ số n-1, trong đó tổng số phần tử của mảng.
  • Việc khai báo mảng liên quan đến việc xác định kiểu dữ liệu của các phần tử trong mảng cũng như số lượng phần tử sẽ được lưu trữ trong mảng.
  • Mảng một chiều lưu trữ các phần tử một cách tuần tự.
  • Mảng hai chiều lưu trữ các phần tử trong hàng và cột.
  • Mảng ba chiều là một mảng của các mảng.
  • Các phần tử có thể được thêm vào một mảng bằng cách sử dụng các chỉ mục của chúng.
  • Các phần tử mảng được truy cập bằng cách sử dụng các chỉ mục của chúng.
  • Một mảng nhiều chiều có nhiều hơn một chiều.
  • Tên mảng trỏ đến phần tử đầu tiên của nó.
  • Mảng có kích thước cố định, nghĩa là không thể thêm các phần tử mới vào mảng sau khi khởi tạo.