Con trỏ (pointer) từ cơ bản tới nâng cao phần 2

Share:
Phần 2 rồi, và nó sẽ khó hơn một chút. Học càng chậm lại nhé!

Kiểu dữ liệu của con trỏ

Lấy một ví dụ đơn giản thế này:
Hiểu kiểu dữ liệu của con trỏ chưa nào? quá dễ hiểu! Vậy xem ví dụ sau:

Các phép toán trên con trỏ

1. Phép gán
- Tất cả con trỏ đều có phép gán.
- Như phần khởi tạo, phép gán yêu cầu vế trái là một con trỏ, và vế phải là một địa chỉ.
- Phép gán yêu cầu sự tương xứng về kiểu dữ liệu, nếu không chúng ta phải ép kiểu, các bạn biết ép kiểu không?
- Phép gán với con trỏ kiểu void không cần phải tương xứng kiểu dữ liệu.
Xem ví dụ:

2. Phép so sánh
- Phép so sánh ngang bằng dùng để kiểm tra 2 con trỏ có trỏ vào cùng 1 vùng nhớ hay không, hoặc kiểm tra 1 con trỏ có phải là đang trỏ vào NULL hay không (trong trường hợp cấp phát động, mở file, mở resource, vv).




- Phép so sánh lớn hơn nhỏ hơn: >, =, <= sử dụng để kiểm tra về độ thấp cao giữa 2 địa chỉ. Con trỏ nào nhỏ hơn thì trỏ vào địa chỉ thấp hơn.
- Được quyền so sánh mọi con trỏ với 0, vì 0 chính là NULL.

Lưu ý: chúng ta sẽ đi sâu về phép so sáng này sau, vì nâng cao nó khá khó!
3. Phép cộng trừ và phép tăng giảm
Bản chất của việc tăng giảm con trỏ là di chuyển con trỏ đi lên hoặc đi xuống:
- Đương nhiên không phải di chuyển sang ô nhớ kế tiếp (byte kế tiếp), mà phụ thuộc vào kiểu dữ liệu của vùng nhớ con trỏ trỏ tới.
Ví dụ:

Chú ý:
- Không có phép tăng giảm con trỏ void và con trỏ hàm.
- Không có phép cộng 2 con trỏ với nhau.
- Phép trừ 2 con trỏ trả về độ lệch pha giữa 2 con trỏ

Một số ví dụ hay và đương nhiên...khó!

Chương trình viết hoa một chuỗi được nhập vào từ bàn phím
Chương trình in ra chuỗi bị đảo ngược
Chương trình con lấy độ dài một chuỗi (khi học nhúng thì bạn nên viết chương trình con ra như vậy thay vì dùng hàm có sẵn, bạn phải khai báo thư viện, tốn bộ nhớ

1 nhận xét: