Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 31 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
31
Dung lượng
699,5 KB
Nội dung
Chương CON TRỎ (Pointer) 1 Khái niệm Một trỏ biến chứa địa ô nhớ Địa vị trí đối tượng khác nhớ Ví du: float x; //x biến có kiểu float x=12.5; //x có giá trị 12.5 Và lúc này, biến x chiếm ô nhớ liên tiếp, giả sử ô nhớ có kích thước byte Địa nhớ Địa ô nhớ số thứ tự byte dãy byte liên tiếp Địa tính hệ đếm 16 Ví dụ : int a[4]; Mỗi biến kiểu int chiếm bytes, nhớ dành ô nhớ cho biến a Và cách đánh địa sau: giả sử địa biến a[0] ffee Con trỏ Con trỏ kiểu liệu đặt biệt dùng để quản lý địa ô nhớ Con trỏ kiểu dùng để chứa địa biến kiểu ; nghĩa trỏ kiểu int dùng để chứa địa biến kiểu int, trỏ kiểu float dùng để chứa địa biến kiểu float Cách khai báo sau: int * ; Ví dụ: int *pi; px Có thể khai báo trỏ nhiều cấp, ví dụ: int * *ppi; float * * *pppf; Phép lấy địa biến Kí hiệu: & Cách sử dụng:& Ví dụ: int *pi=&a; // pi giữ địa biến nguyên a Lưu ý: Trong trường hợp trên, pi địa có giá trị địa &a, &pi địa giá trị địa &a mà nơi ghi nhận giá trị &a, đó: int **ppi=π // trỏ cấp Phép toán lấy giá trị địa mà trỏ trỏ tới Kí hiệu: * Cách sử dụng: * Ví dụ: int a= 10; // biến a có giá trị 10 int *pi; pi =&a; //pi giữ địa biến a *pi giá trị a bà 10 Ví dụ 1 int a=25, x; int *y; x=a; y=&a; a y x 25 y Ví dụ int a, *p; a=25; p=&a; m=*p ; Cho biết Giá trị m ? Phép toán lấy thành phần cấu trúc với trỏ Kí hiệu: -> Cách sử dụng: -> Ví dụ: T trỏ struct gồm thành phần a b T>a T->b giá trị thành phần a,b địa mà T trỏ vào Ghi chú: phép tốn nói thêm chương cấu trúc Chú ý Cần ý việc thay đổi giá trị pi làm cho giá trị a thay đổi theo ngược lại Khi ta khai báo: int a=10; int *pi=&a; // pi giữ địa biến a *pi=*pi +2; sẽ làm cho biến a có giá trị 12 Lưu ý: Việc sử dụng thao tác giá trị địa trỏ thực sau trỏ có địa 10 3.1 Cấp phát nhớ động C++ C++ cung cấp hai toán tử cấp phát nhớ động: new delete −Toán tử new cấp phát nhớ trả trỏ đến byte vùng nhớ cấp phát −Toán tử delete thu hồi vùng nhớ cấp phát trước tốn tử new 17 Lưu ý: Cần kiểm tra xem việc cấp phát nhớ có thành cơng hay khơng Nếu thành cơng, trỏ trỏ đến địa đầu khối nhớ cấp phát lúc thực thao tác trỏ Khi ta khai báo: int *pi; pi= new int; if (pi==NULL) { cout