Ngôn ngữ lập trình - Con trỏ

Sử dụng lớp Hinhtron để viết chương trình tạo hình tròn (cấp phát động) với các lời gọi cấu tử khác nhau. Hoàn chỉnh lớp Sinhvien đã học với các phương thức cần thiết. Viết chương trình nhập một số N, sau đó tạo mảng động N phần tử với giá trị là các số Fibonacci. In mảng ra màn hình và cuối cùng giải phóng mảng.

ppt25 trang | Chia sẻ: aloso | Lượt xem: 2160 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Ngôn ngữ lập trình - Con trỏ, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình C++ 1 Con trỏ Biến và con trỏ Cấp phát và giải phóng bộ nhớ động Mô hình bộ nhớ chương trình Quan hệ giữa mảng và con trỏ Phân biệt tham chiếu và con trỏ Mảng con trỏ. Con trỏ cấu trúc. Con trỏ void Con trỏ làm đối số trong hàm Review Bài tập Biến và con trỏ Khai báo int a = 5; // a là biến chứa giá trị int int *p; // p là con trỏ int, p là biến chứa địa chỉ // của ô nhớ kiểu int Truy nhập ô nhớ p = &a; // toán tử & cho phép lấy địa chỉ của một biến, // p chứa địa chỉ của biến a *p = 7; // toán tử * cho phép truy nhập giá trị ô nhớ // thông qua địa chỉ, giá trị của ô nhớ có địa // chỉ trong p được gán giá trị 7 Biến và con trỏ Mô tả: int a = 5; // a là biến chứa giá trị int int *p; // p là con trỏ int, p là biến chứa địa chỉ p = &a; // p trỏ đến a *p = 7; // gán giá trị qua p 1. Cấp ô nhớ cho a 2. Cấp ô nhớ cho p 3. p chứa địa chỉ của biến a 4. gán giá trị vào ô nhớ có địa chỉ trong p Biến và con trỏ Cho biết kết quả trên màn hình: int a = 5; int *p; p = &a; cout Khi giải phóng vùng nhớ, nên gán tất cả con trỏ trỏ đến vùng nhớ đó bằng NULL. delete p; // giải phóng vùng nhớ do p trỏ đến p = NULL; // p không chứa địa chỉ của vùng nhớ nào, // p không trỏ đến vùng nhớ nào Không giải phóng một vùng nhớ đã cấp phát sẽ dẫn đến hiện tượng rò bộ nhớ (memory leak). Cấp phát và giải phóng bộ nhớ động Cho biết kết quả của đoạn chương trình sau: int *p, *q; p = new int(1); q = new int(2); cout int g; void test(int x) { int c; coutsoluong = 7; // giống (*q).soluong = 7; q->dongia = 20.50; // giống (*q).dongia = 20.50; Con trỏ đối tượng Ví dụ lớp Sinh viên class Sinhvien { private: ... float dtb; public: void DatDTB(float d) { dtb = d; } }; ... Sinhvien *p = new Sinhvien; p->DatDTB(8.7); // giống (*p).DatDTB(8.7); Con trỏ đối tượng Ví dụ lớp Hình tròn class Hinhtron { private: int bankinh; public: Hinhtron(int a) { bankinh = a; } float LayDientich() { return 3.14*bankinh*bankinh; } }; ... Hinhtron *p = new Hinhtron(4); // tạo hình tròn có đối số coutLayDientich(); // giống (*p).LayDientich(); Con trỏ void Con trỏ void là con trỏ có thể trỏ đến bất kỳ đối tượng nào. Khi muốn lấy giá trị của nó ta cần phải ép kiểu. void* p; p = new int(4); // p trỏ đến một vùng nhớ kiểu int coutsoluong; // ép kiểu Hanghoa p = new Sinhvien; // p trỏ đến một vùng nhớ kiểu Sinhvien ((Sinhvien *) p)->DatDTB(8.7); // ép kiểu Sinhvien p = new Hinhtron(4); // p trỏ đến một vùng nhớ kiểu Hinhtron coutLayDientich(); // ép kiểu Hinhtron Con trỏ và hàm Con trỏ làm đối số: Thường được dùng khi đối số truyền vào là một mảng void display(int *p, int n) { for(int i=0; i<n; i++) cout<<p[i]<<endl; } void main() { int x[5] = {3, 8, 2, 9, 4}; display(x, 5); } Con trỏ và hàm Con trỏ làm kết quả trả về: Thường được dùng để trả về một xâu kí tự hay một mảng. class Sinhvien { private: char ten[30]; public: char* LayTen(); }; char* Sinhvien::LayTen() { return ten; } Con trỏ và hàm Tham chiếu con trỏ: Được dùng khi muốn thay đổi giá trị địa chỉ trong con trỏ. void test(int *&p) { ... } Con trỏ hàm: (Bài 6) typedef void (*FunctionType)(int x); Review Biến và con trỏ khác nhau thế nào ? Phân biệt biến tĩnh và biến động ? Nêu các vùng nhớ của chương trình ? Trong C++, mảng là con trỏ như thế nào ? Tham chiếu khác con trỏ như thế nào ? Con trỏ void là gì ? Nêu một số ví dụ về sử dụng con trỏ hàm ? Bài tập về nhà Sử dụng lớp Hinhtron để viết chương trình tạo hình tròn (cấp phát động) với các lời gọi cấu tử khác nhau. Hoàn chỉnh lớp Sinhvien đã học với các phương thức cần thiết. Viết chương trình nhập một số N, sau đó tạo mảng động N phần tử với giá trị là các số Fibonacci. In mảng ra màn hình và cuối cùng giải phóng mảng.

Các file đính kèm theo tài liệu này:

  • pptNgôn ngữ lập trình - Con trỏ.ppt
Tài liệu liên quan