Điểm số là một tính năng thường dùng trong C và C++, cho phép thao tác trực tiếp các địa chỉ bộ nhớ. Trong khi sử dụng không đúng có thể dẫn đến lỗi, điểm yếu bảo mật và hành vi không xác định. Bài này trình bày các ví dụ thực tế minh họa cả các ứng dụng lẫn cạm bẫy số học con trỏ.

Thí dụ 1: Những cuộc nổi dậy quay cuồng

Số học điểm thường được dùng để lặp lại thông qua các dãy có hiệu quả. Ví dụ, để tổng hợp các yếu tố của một dãy số nguyên:

cách dùng đúng:

tổng số bằng 0;

int *ptr = n dòng;

(int i = 0; i < kích cỡ; i++){

Tổng + * (ptr + i)

- Không.

Phương pháp này truy cập đúng các phần tử dãy bằng số học con trỏ.

cạm bẫy 1: Điểm nổi bật hơn cả giới hạn

Những con trỏ chuyển động ngoài bộ nhớ phân cấp có thể gây ra hành vi không xác định.

int *ptr = n dòng;

(int i = 0; i <= kích cỡ; i++){

printf("%dn", * (ptr + i);

- Không.

Truy cập * (ptr + kích cỡ) vượt quá các giới hạn, dẫn đến kết quả không thể đoán trước.

Ví dụ 2: Chuỗi Quản lý

Số học điểm thường được dùng trong tiến trình xử lý chuỗi. Ví dụ, sao chép chuỗi:

Cách tiếp cận sửa chữa:

Charles = "Xin chào,"

Charles dest[6];

:

Charles *q = dest;

trong khi (*p){

*q++ = *p++;

- Không.

*q = '';

Thác số 2:

Không phân phát không gian cho trình hủy diệt vô hạn hoặc sao chép ngoài vùng đệm gây ra tràn. Ví dụ:

Charles dest[5];

7: "Thế giới"

(int i = 0; i < = 5 i++){

[i] = p [i];

- Không.

Điều này sao chép sáu ký tự vào một bộ đệm năm ký tự, gây ra tràn.

Kết luận

Số học chỉ rõ cung cấp tính linh hoạt trong C và C++, nhưng cần phải xử lý cẩn thận để tránh lỗi.