Biến con trỏ (pointer variables)

Một phần của tài liệu Giao trinh c++ Đại Học Công Nghệ Đồng Nai Đầy Đủ và Chuyên Sâu (Trang 80 - 83)

Chương 3 : CÁC CẤU TRÚC ĐIỀU KHIỂN

2. Biến con trỏ (pointer variables)

Nếu một biến sẽ chứa địa chỉ của một biến khác thì nó phải được khai báo là một con trỏ. Khai báo 1 biến là con trỏ gồm kiểu dữ liệu cơ sở, một dấu *, và tên biến. Dạng tổng quát để khai báo một biến con trỏ là

type *pointerVariable;

type: xác định kiểu dữ liệu của biến mà con trỏ có thể trỏ đến. Ví

dụ con trỏ có kiểu int sẽ trỏ đến biến có kiểu int. Do các phép tốn số học trên con trỏ (tăng, giảm) liên quan đến type của nó nên cần phải khai báo type của con trỏ đúng đắn.

2.1. Các toán tử con trỏ (pointer operators)

Có 2 tốn tử con trỏ là * và &.

Toán tử & là tốn tử 1 ngơi mà trả về địa chỉ bộ nhớ của toán hạng của nó. (tốn tử 1 ngơi chỉ u cầu 1 tốn hạng).

Ví dụ:

int count; int *m; m = &count;

Lệnh m=&count; đặt địa chỉ bộ nhớ của biến count vào con trỏ m. Lệnh trên có thể phát biểu: "con trỏ m nhận địa chỉ của biến count.".

Giả sử biến count được cấp phát tại địa chỉ bộ nhớ 2000 để lưu trữ giá trị của nó. Giả sử rằng count có giá trị 100. Như vậy, tại địa chỉ bộ nhớ 2000 có chứa giá trị 100. Sau khi lệnh m = &count; được thực hiện thì m sẽ có giá trị là 2000.

Toán tử con trỏ * là toán tử một ngôi trả về giá trị tại địa chỉ con trỏ trỏ đến.

Ví dụ: q = *m;

Lấy giá trị tại địa chỉ mà m trỏ đến và đặt vào biến q. Như vậy q sẽ có giá trị là 100 (là giá trị của biến count).

2.2. Các thao tác trên con trỏ 2.2.1. Lệnh gán con trỏ

Ta có thể dùng một con trỏ ở bên phải của câu lệnh gán (=) để gán giá trị của 1 con trỏ cho một con trỏ khác. Ví dụ:

int x;

int *p1, *p2; p1 = &x; p2 = p1;

Sau khi đọan lệnh trên được thực hiện, cả hai p1 và p2 cùng trỏ đến biến x.

2.2.2. Phép toán số học trên con trỏ

Chỉ có 2 phép tốn số học ta có thể dùng trên con trỏ đó là cộng và trừ. Giả sử p1 là một con trỏ nguyên với giá trị hiện tại là 2000. Cũng giả sử rằng số nguyên chiếm 2 bytes bộ nhớ. Như vậy, sau khi thực hiện lệnh p1++; thì p1 có giá trị là 2002 chứ khơng phải 2001. Tương tự, Giả sử p1 là một con trỏ nguyên với giá trị hiện tại là 2000. Cũng giả sử rằng số nguyên chiếm 2 bytes bộ nhớ. Như vậy, sau khi thực hiện lệnh p1--; thì p1 có giá trị là 1998 chứ

không phải 1999.

Tổng quát từ 2 ví dụ trên: Tất cả con trỏ sẽ tăng hay giảm với đơn vị là kích thước của kiểu dữ liệu của nó.

Ngồi tốn tử tăng (++) và giảm (--), ta có thể cộng hay trừ số nguyên với con trỏ. Ví dụ: theo hình minh họa trên.

Con trỏ char ch chứa địa chỉ 3000, vậy lệnh

ch = ch + 3;

ch sẽ chứa địa chỉ 3003

Con trỏ nguyên i chứa địa chỉ 3000, vậy lệnh

i = i + 2;

i sẽ chứa địa chỉ 3004

Lưu ý: đơn vị tăng của con trỏ char là 1 byte, con trỏ int là 2 bytes.

Tương tự, giả sử con trỏ char ch chứa địa chỉ 3003, vậy lệnh

ch = ch – 3; ch sẽ chứa địa chỉ 3000 Giả sử kiểu ngun (int) có kích thức 2 bytes. Giả sử kiểu ký tự (char) có kích thức 1 byte.

Giả sử con trỏ nguyên i chứa địa chỉ 3004, vậy lệnh

i = i – 2;

i sẽ chứa địa chỉ 3000

Một phần của tài liệu Giao trinh c++ Đại Học Công Nghệ Đồng Nai Đầy Đủ và Chuyên Sâu (Trang 80 - 83)

Tải bản đầy đủ (PDF)

(156 trang)