Menu
CoddyTech

Con trỏ và mảng

Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 5 trên 56.

Mảng và con trỏ có mối liên hệ đặc biệt trong C++. Khi khai báo một mảng, tên mảng thực chất hoạt động như một con trỏ trỏ đến phần tử đầu tiên của mảng đó. Mối liên hệ này cho phép bạn dùng con trỏ để thao tác với mảng theo nhiều cách mạnh mẽ.

Xét khai báo mảng sau:

int numbers[5] = {10, 20, 30, 40, 50};
int* ptr = numbers;  // ptr hiện trỏ đến numbers[0]

Ở đây, numbers tương đương với &numbers[0], cả hai đều cho bạn địa chỉ của phần tử đầu tiên. Con trỏ ptr hiện trỏ đến cùng một vị trí.

Khi đã có con trỏ đến một mảng, bạn có thể dùng phép toán con trỏ để di chuyển qua các phần tử. Cộng 1 vào con trỏ sẽ đưa nó đến phần tử tiếp theo cùng kiểu:

ptr++;        // Giờ trỏ đến numbers[1]
ptr = ptr + 2; // Giờ trỏ đến numbers[3]

Bạn có thể giải tham chiếu con trỏ ở bất kỳ vị trí nào để truy cập giá trị: *ptr cho bạn giá trị tại vị trí hiện tại, còn *(ptr + 1) cho bạn giá trị của phần tử tiếp theo.

Mối quan hệ giữa con trỏ (pointer) và mảng (array) này cho phép bạn duyệt mảng bằng con trỏ thay vì dùng vòng lặp dựa trên chỉ số (index-based loop) truyền thống, mang đến một cách khác để duyệt mảng.

challenge icon

Thử thách

Dễ

Tạo một chương trình dùng con trỏ để duyệt qua mảng và in ra từng phần tử, qua đó thể hiện mối quan hệ giữa con trỏ và mảng.

Bạn được cung cấp mảng sau:

int values[6] = {15, 23, 8, 42, 17, 31};

Chương trình của bạn cần:

  1. Tạo một con trỏ tên là ptr trỏ đến phần tử đầu tiên của mảng values
  2. Dùng phép toán con trỏ để duyệt qua tất cả 6 phần tử của mảng
  3. In ra từng phần tử bằng cách giải tham chiếu con trỏ tại mỗi vị trí
  4. Dùng phép toán con trỏ để di chuyển con trỏ đến phần tử tiếp theo (tăng con trỏ)

In mỗi phần tử trên một dòng riêng theo định dạng sau:

Element: [value]

Đầu ra cần hiển thị đủ 6 phần tử theo thứ tự xuất hiện trong mảng, truy cập từng phần tử bằng cách giải tham chiếu con trỏ thay vì dùng chỉ số mảng.

Tự làm thử

#include <iostream>
using namespace std;

int main() {
    // Mảng cho trước
    int values[6] = {15, 23, 8, 42, 17, 31};
    
    // TODO: Tạo con trỏ tên 'ptr' trỏ đến phần tử đầu tiên của mảng
    
    // TODO: Dùng vòng lặp để duyệt cả 6 phần tử bằng phép toán con trỏ
    // TODO: In ra từng phần tử bằng cách giải tham chiếu con trỏ
    // TODO: Di chuyển con trỏ đến phần tử tiếp theo bằng phép toán con trỏ
    
    return 0;
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch C++ online