Xem thêm

Các phép toán trên Con trỏ và Chỉ mục mảng trong C++ (Pointers and arrays)

Huy Erick
Giới thiệu Con trỏ và mảng là hai khái niệm quan trọng trong ngôn ngữ lập trình C++. Trong bài học trước, chúng ta đã tìm hiểu về sự liên quan giữa con trỏ và...

Giới thiệu

Con trỏ và mảng là hai khái niệm quan trọng trong ngôn ngữ lập trình C++. Trong bài học trước, chúng ta đã tìm hiểu về sự liên quan giữa con trỏ và mảng. Hôm nay, chúng ta sẽ đi sâu vào tìm hiểu về các phép toán trên con trỏ và chỉ mục mảng trong C++.

Phép toán số học trên Con trỏ

Trong C++, bạn có thể thực hiện các phép toán cộng hoặc trừ số nguyên trên con trỏ. Nếu ptr trỏ đến một số nguyên, ptr + 1 sẽ là địa chỉ của số nguyên tiếp theo trong bộ nhớ sau ptr. Ngược lại, ptr - 1 sẽ là địa chỉ của số nguyên trước đó trong bộ nhớ trước ptr.

int value = 5;
int *ptr = &value;
cout << ptr << '\n'; // Địa chỉ của value
cout << ptr + 1 << '\n'; // Địa chỉ của số nguyên tiếp theo
cout << ptr + 2 << '\n'; // Địa chỉ của số nguyên sau tiếp theo
cout << ptr + 3 << '\n'; // Địa chỉ của số nguyên tiếp theo sau đó

Trong ví dụ trên, mỗi địa chỉ trong số này khác nhau 4 đơn vị, bằng kích thước của kiểu int là 4 byte.

Mảng tĩnh được lưu trong bộ nhớ như thế nào?

Trong C++, mảng tĩnh là một khối nhớ liên tục được chỉ định cho một biến kiểu mảng. Các phần tử của mảng được sắp xếp tuần tự trong bộ nhớ, nghĩa là array[0], array[1], array[2], ... nằm cạnh nhau và theo thứ tự.

int array[] = {5, 8, 2, 7};
cout << "Element 0 is at address: " << &array[0] << '\n';
cout << "Element 1 is at address: " << &array[1] << '\n';
cout << "Element 2 is at address: " << &array[2] << '\n';
cout << "Element 3 is at address: " << &array[3] << '\n';

Mỗi địa chỉ trong số này liên tục nhau, khác nhau 4 đơn vị, bằng kích thước của kiểu int là 4 byte.

Ứng dụng giữa Con trỏ số học, Mảng, và Chỉ mục mảng

Cộng n vào một mảng sẽ tạo ra một con trỏ trỏ đến địa chỉ phần tử thứ n của mảng. Điều này có thể được ứng dụng trong trường hợp duyệt một mảng.

const int arrayLength = 4;
int array[arrayLength] = {5, 8, 2, 7};
for (int* ptr = array; ptr < array + arrayLength; ptr++) {
    cout << *ptr << '\n';
}

Theo cách này, chúng ta có thể lặp qua từng phần tử của mảng một cách dễ dàng.

Kết luận

Qua bài học này, chúng ta đã tìm hiểu về các phép toán trên con trỏ và chỉ mục mảng trong ngôn ngữ lập trình C++. Đây là những kiến thức quan trọng mà bạn cần nắm vững để có thể sử dụng trong những bài học tiếp theo.

1