Menu
CoddyTech

Số học: các phép toán

Bài học 4 trên 14 trong khóa học Con trỏ trong C++ của Coddy.

++ / --

Tăng hoặc giảm một con trỏ sẽ di chuyển nó đến vị trí bộ nhớ tiếp theo hoặc trước đó có cùng kiểu dữ liệu. Điều này rất hữu ích khi ta có một mảng và đặt con trỏ trỏ đến phần tử đầu tiên. Mỗi lần tăng, ta di chuyển sang phải một phần tử

int list[] = {1, 2, 3, 4, 5};
int *ptr = &list[0];
cout << *ptr << " ";
ptr++;
cout << *ptr << " ";
ptr--;
cout << *ptr;
Output:
1 2 1

Như bạn thấy, khi tăng hoặc giảm con trỏ, ta di chuyển đến vị trí bộ nhớ tiếp theo có cùng kiểu dữ liệu, trong trường hợp này là phần tử tiếp theo hoặc trước đó trong mảng


+= / -=

Cộng hoặc trừ một số lớn hơn 1 giúp ta di chuyển nhanh hơn và đi qua nhiều phần tử hơn mỗi lần

int list[] = {1, 2, 3, 4, 5};
int *ptr = &list[0];
cout << *ptr << " ";
ptr += 4;
cout << *ptr << " ";
ptr -= 2;
cout << *ptr;
Output:
1 5 3

n = p2 - p1

Thao tác hữu ích cuối cùng ta có thể thực hiện với con trỏ là tính số phần tử nằm giữa chúng. Ta có thể làm điều đó bằng cách tính hiệu của chúng

int list[] = {1, 2, 3, 4, 5};
int *ptr = &list[0];
int *ptr2 = &list[4];
cout << "Between " << *ptr << " and " << *ptr2
 << " there's " << ptr2-ptr << " elements";
Output:
Between 1 and 5 there's 4 elements

Ta có thể dùng 3 kỹ thuật này để thực hiện nhiều thao tác hữu ích với con trỏ và giải quyết vấn đề trong các công việc thường ngày

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

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

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

challenge icon

Thử thách

Dễ

Cho mảng số nguyên sau:

int numbers[] = {10, 20, 30, 40, 50, 60, 70, 80};
  • Tạo một con trỏ ptr1 trỏ đến phần tử đầu tiên của mảng.
  • Tạo một con trỏ ptr2 và gán giá trị của ptr cho nó
  • Tăng ptr2 để chuyển đến phần tử thứ tư
  • Tạo ptr3 và gán giá trị của ptr2 cho nó 
  • Giảm ptr3 đi 2 vị trí
  • Tính và IN RA số phần tử nằm giữa phần tử đầu tiên và phần tử cuối cùng trong mảng bằng phép trừ con trỏ theo cách sau There are {elements} elements between {first} and {last}

Tự làm thử

#include <iostream>

using namespace std;

int main() {
    
    int numbers[] = {10, 20, 30, 40, 50, 60, 70, 80};
    
    // Viết code cho ptr1
    
    // Viết code cho ptr2
    
    // Viết code cho ptr3
    
    // In ra thông báo theo yêu cầu
    
    
    
    // KHÔNG THAY ĐỔI BẤT CỨ THỨ GÌ BÊN DƯỚI
    // ---------------------------------

    cout << "*ptr1 -> " << *ptr1 << endl;
    cout << "*ptr2 -> " << *ptr2 << endl;
    cout << "*ptr3 -> " << *ptr3 << endl;
    
    return 0;
}

Tất cả bài học trong Con trỏ trong C++

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