Nội dung Tổ chức chương trình Địa Biến trỏ Các thao tác biến trỏ Biến tĩnh biến động Cấp phát hủy biến động HIENLTH, C++ - 2010 HIENLTH, C++ - 2010 Địa Tổ chức chương trình Một chương trình chia thành nhiều phân đoạn (segment) Mỗi segment xem mảng chiều Mỗi segment lưu loại liệu định Một ô nhớ (một biến bất kỳ) chương trình có địa Mỗi địa gồm có hai thành phần: Tên segment lưu l u biến Vị trí biến segment Data Segment: lưu biến toàn cục Stack Segment: lưu biến cục hàm thông tin khác Heap Segment: lưu biến động Code Segment: lưu thị đoạn mã chương trình HIENLTH, C++ - 2010 Địa thường ký hiệu segment:offset Segment Data, Heap, Code, Stack Offset vị trí biến segment tương ứng HIENLTH, C++ - 2010 Con trỏ – Một số lý nên sử dụng Ví dụ int a; void main() { int b; double c; … } 16 12 c b Stack 16 12 Con trỏ kiểu liệu lưu trữ địa vùng liệu nhớ máy tính Kiểu trỏ cho phép: Truyền tham số kiểu địa Biểu diễn kiểu, cấu trúc liệu động Lưu trữ liệu vùng nhớ heap a Data HIENLTH, C++ - 2010 Biến trỏ HIENLTH, C++ - 2010 Con trỏ – Khai báo C++ Là biến dùng để lưu giá trị địa Cú pháp khai báo biến trỏ int long int *p; Kiểu* tên-biến; Ý nghĩa: khai báo biến trỏ dùng để lưu địa biến thuộc kiểu Biến trỏ có kích thước bytes (hệ điều hành 32 bit) float* fl t* pf; f char c, d, *pc; /* c d kiểu char pc trỏ đến char */ double* pd, e, f; char *start, *end; Ví dụ: int* pint; // khai báo biến trỏ dùng để lưu địa biến thuộc kiểu int double* pd; // khai báo biến trỏ dùng để lưu địa biến thuộc kiểu double HIENLTH, C++ - 2010 *pi; /* pd trỏ đến double e and f are double */ HIENLTH, C++ - 2010 Con trỏ - Toán tử “&” Các thao tác trỏ Phép lấy địa chỉ: Địa tất biến chương trình định từ khai báo Kí hiệu: & Cú pháp: &tên-biến Ý nghĩa: lấy địa biến kèm Biến lấy địa phải thuộc kiểu mà trỏ lưu địa Ví dụ: char g = 'z'; void main() { char c = 'a'; char *p; p = &c; p = &g; } int a = 5; int* pa = &a; // pa lưu địa biến a int **pb = &pa;//pb lưu địa trỏ pa HIENLTH, C++ - 2010 Con trỏ - Toán tử * p 0x91A2 c 'a' 0x1132 g 'z' 0x91A2 10 HIENLTH, C++ - 2010 Con trỏ - Toán tử * Phép khử địa #include using namespace std; char g = 'z'; a void main() z { char c = 'a'; char *p; p = &c; cout