SlideShare a Scribd company logo
1 of 22
Download to read offline
Con trỏ

1.   Biến và con trỏ
2.   Cấp phát và giải phóng bộ nhớ động
3.   Mô hình bộ nhớ chương trình
4.   Quan hệ giữa mảng và con trỏ
5.   Phân biệt tham chiếu và con trỏ
6.   Mảng con trỏ. Con trỏ cấu trúc. Con trỏ void
7.   Con trỏ làm đối số trong hàm
8.   Review
9.   Bài tập
                                                    1
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

                                                             2
Biến và con trỏ

        Mô tả:
   1.    int a = 5; // a là biến chứa giá trị int
   2.    int *p;    // p là con trỏ int, p là biến chứa địa chỉ
   3.    p = &a; // p trỏ đến a
   4.    *p = 7; // gán giá trị qua p
                        a                   a                      a
1. Cấp ô
nhớ cho a
               1001     5          1001     5           1001       7


                        p                   p                      p
2. Cấp ô       1100                1100    1001         1100      1001
nhớ cho p
                                   3. p chứa địa chỉ     4. gán giá trị vào ô
                                   của biến a            nhớ có địa chỉ trong p   3
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<< *p <<“t”<< a <<endl;
   *p = 8;
   cout<< *p <<“t”<< a <<endl;
   a = 9;
   cout<< *p <<“t”<< a <<endl;


                                   4
Cấp phát và giải phóng bộ nhớ động

 Biến tĩnh
   Là biến được cấp vùng nhớ ngay khi lời khai báo
   được thực hiện
   Tự động mất đi khi ra khỏi phạm vi khai báo
   Biến tĩnh thường được sử dụng thông qua tên biến
 Biến động
   Là biến được cấp vùng nhớ bất kì khi nào chương
   trình yêu cầu
   Bị mất đi khi chương trình giải phóng vùng nhớ
   Biến động thường được sử dụng thông qua con trỏ

                                                      5
Cấp phát và giải phóng bộ nhớ động

 Toán tử new: Cấp phát vùng nhớ
   int *p, *q, *r;
   p = new int;     // cấp phát ô nhớ cỡ int
   q = new int(5); // cấp phát đồng thời khởi tạo giá trị
   r = new int[8]; // cấp phát mảng động
 Toán tử delete: Giải phóng vùng nhớ
   delete p; // giải phóng vùng nhớ do p trỏ đến
   delete[] r; // giải phóng mảng động



                                                            6
Cấp phát và giải phóng bộ nhớ động

 Ví dụ:
   // biến động
   int *p = new int(5); // cấp phát ô nhớ
   cout<< *p << endl;
   delete p; // giải phóng ô nhớ

   // mảng động
   int *r = new int[7]; // cấp phát mảng động
   for(int i = 0; i<7; i++)
   {
       r[i] = 3;
       cout<<r[i]<<endl;
   }
   delete[ ] r; // giải phóng mảng động

                                                7
Cấp phát và giải phóng bộ nhớ động

 Chú ý: Khi giải phóng một vùng nhớ thì con trỏ
 trỏ đến vùng nhớ đó vẫn chứa địa chỉ của vùng
 nhớ, và như vậy việc truy nhập đến vùng nhớ đã
 giải phóng là không hợp lệ (về logic).
 => 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).
                                                          8
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<< *p <<quot;tquot;<< *q <<endl;
   *p = *q + 3;
   cout<< *p <<quot;tquot;<< *q <<endl;
   p = q;
   cout<< *p <<quot;tquot;<< *q <<endl;
   *p = 7;
   cout<< *p <<quot;tquot;<< *q <<endl;
   p = new int;
   delete p;
   p = NULL;
   q = NULL;
                                               9
Mô hình bộ nhớ chương trình

 Khi một chương trình được thực thi (execute),
 nó có các vùng nhớ như sau:
   Vùng CODE: Chứa mã lệnh chương trình
   Vùng DATA: Chứa các biến toàn cục
   Vùng STACK: Chứa các biến cục bộ
   Vùng HEAP: Chứa các biến động
 Kích thước của vùng có thể được thiết đặt trước
 khi biên dịch.



                                                 10
Mô hình bộ nhớ chương trình

 Thử nghiệm:
   #include <iostream.h>
   int g;
   void test(int x)
   {    int c;
        cout<<“Dia chi cua x la: “<< &x <<endl;
        cout<<“Dia chi cua c la: “<< &c <<endl;
   }
   void main()
   {    int m;
        cout<<“Dia chi cua m la: ”<< &m <<endl;
        test(8);
        cout<<“Dia chi cua g la: ”<< &g <<endl;
        int *p = new int;
        cout<<“Dia chi p la: ”<< p <<endl;
   }

                                                  11
Mảng và con trỏ

 Trong C++, mảng là con trỏ hằng trỏ đến một
 dãy ô nhớ.
 Ví dụ: int x[7]; int a; int *p;
   x là một mảng, x là con trỏ hằng trỏ đến ô nhớ đầu
   tiên của 7 ô nhớ được cấp phát
   Vì x là con trỏ hằng nên ta không thể thay đổi giá trị
   địa chỉ mà nó lưu giữ, ví dụ: x = &a;
   Vì p cũng là con trỏ nên ta có thể gán p = x;
   x trỏ đến ô nhớ đầu tiên, x+1 trỏ đến ô nhớ tiếp
   theo... Vậy ta có *(x+1) tương đương với x[1]...


                                                            12
Mảng và con trỏ

 Cho biết kết quả của đoạn chương trình sau:
   int x[5] = {5, 3, 4, 8, 9};
   int *p = x;
   *p = 1;
   *(p+1) = 7;
   p[2] = 15;
   x[3] = p[3] + 2;
   for(int i=0; i<5; i++)
       cout<<x[i]<<endl;


                                               13
Con trỏ và tham chiếu

 Con trỏ và tham chiếu hoạt động gần giống
 nhau song chúng khác nhau.
 Tham chiếu: Là bí danh của một biến.
 Con trỏ: Là biến chứa địa chỉ.
 Có thể tạo tham chiếu tới một biến động. Ví dụ:
   int *p = new int(3); // tạo biến động
   int &x = *p; // tạo tham chiếu tới biến động
   cout<<x<<endl;
   cout<<&x<<endl<<p;

                                                   14
Mảng con trỏ

 Cho biết kết quả của đoạn chương trình sau:
   int *r[5]; // khai báo mảng 5 con trỏ
   int i;
   for(i=0; i<5; i++)
   {
        r[i] = new int(i*2); // cấp phát vùng nhớ cho từng con trỏ
        cout<<*(r[i])<<endl;
   }
   for(i=0; i<5; i++)
   {
       delete r[i]; // giải phóng vùng nhớ
       r[i] = NULL;
   }

                                                                     15
Con trỏ cấu trúc

 Ví dụ cấu trúc Hàng hoá
   struct Hanghoa
   {
       int soluong;
       float dongia;
   };
   ...
   Hanghoa x;
   Hanghoa *p, *q;
   p = &x;
   q = new Hanghoa;
   q->soluong = 7;     // giống (*q).soluong = 7;
   q->dongia = 20.50; // giống (*q).dongia = 20.50;

                                                      16
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
   cout<< *((int *) p); // ép kiểu để lấy giá trị int
   p = new Hanghoa; // p trỏ đến một vùng nhớ kiểu Hanghoa
   cout<< ((Hanghoa *) p)->soluong; // é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
   cout<< ((Hinhtron *) p)->LayDientich(); // ép kiểu Hinhtron
                                                                  17
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);
   }
                                                18
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;
   }

                                                19
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);




                                               20
Review

1.   Biến và con trỏ khác nhau thế nào ?
2.   Phân biệt biến tĩnh và biến động ?
3.   Nêu các vùng nhớ của chương trình ?
4.   Trong C++, mảng là con trỏ như thế nào ?
5.   Tham chiếu khác con trỏ như thế nào ?
6.   Con trỏ void là gì ?
7.   Nêu một số ví dụ về sử dụng con trỏ hàm ?



                                                 21
Bài tập về nhà

1.   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.
2.   Hoàn chỉnh lớp Sinhvien đã học với các
     phương thức cần thiết.
3.   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.

                                                    22

More Related Content

What's hot

JavaScriptでオブジェクト指向(Javascript/OOP)
JavaScriptでオブジェクト指向(Javascript/OOP)JavaScriptでオブジェクト指向(Javascript/OOP)
JavaScriptでオブジェクト指向(Javascript/OOP)smzk
 
Лекц 11
Лекц 11Лекц 11
Лекц 11Muuluu
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perlmayperl
 
Lecture5 aлгоритм түүний_шинжчанар
Lecture5 aлгоритм түүний_шинжчанарLecture5 aлгоритм түүний_шинжчанар
Lecture5 aлгоритм түүний_шинжчанарGantur Togtokh
 
1.page maker e book
1.page maker e book1.page maker e book
1.page maker e bookDash Oogii
 
Sentinel Hardware Keys
Sentinel Hardware KeysSentinel Hardware Keys
Sentinel Hardware KeysJong-hyeok Kim
 
Web design book
Web design bookWeb design book
Web design bookmtmsbilig
 
Burmese bible 90)_new_testament
Burmese bible 90)_new_testamentBurmese bible 90)_new_testament
Burmese bible 90)_new_testamentWorldBibles
 

What's hot (17)

JavaScriptでオブジェクト指向(Javascript/OOP)
JavaScriptでオブジェクト指向(Javascript/OOP)JavaScriptでオブジェクト指向(Javascript/OOP)
JavaScriptでオブジェクト指向(Javascript/OOP)
 
Hardware Interface in Android (in tamil)
Hardware Interface in Android (in tamil)Hardware Interface in Android (in tamil)
Hardware Interface in Android (in tamil)
 
Form 6 tamil
Form 6 tamilForm 6 tamil
Form 6 tamil
 
Creating List in Android App (in tamil)
Creating List in Android App (in tamil)Creating List in Android App (in tamil)
Creating List in Android App (in tamil)
 
Lekts12
Lekts12Lekts12
Lekts12
 
Lekts16
Lekts16Lekts16
Lekts16
 
Lekts16
Lekts16Lekts16
Lekts16
 
35th new
35th new35th new
35th new
 
Лекц 11
Лекц 11Лекц 11
Лекц 11
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perl
 
Lecture5 aлгоритм түүний_шинжчанар
Lecture5 aлгоритм түүний_шинжчанарLecture5 aлгоритм түүний_шинжчанар
Lecture5 aлгоритм түүний_шинжчанар
 
Cluster ccsdmsa01
Cluster ccsdmsa01Cluster ccsdmsa01
Cluster ccsdmsa01
 
1.page maker e book
1.page maker e book1.page maker e book
1.page maker e book
 
Sentinel Hardware Keys
Sentinel Hardware KeysSentinel Hardware Keys
Sentinel Hardware Keys
 
Web design book
Web design bookWeb design book
Web design book
 
Rating Bar in Android Example
Rating Bar in Android ExampleRating Bar in Android Example
Rating Bar in Android Example
 
Burmese bible 90)_new_testament
Burmese bible 90)_new_testamentBurmese bible 90)_new_testament
Burmese bible 90)_new_testament
 

Viewers also liked

Bihar- Flood Affected Areas Visit Report
Bihar- Flood Affected Areas Visit ReportBihar- Flood Affected Areas Visit Report
Bihar- Flood Affected Areas Visit Reportguestb72ad9
 
Censimento Prospetti del Centro Storico di Parma
Censimento Prospetti del Centro Storico di ParmaCensimento Prospetti del Centro Storico di Parma
Censimento Prospetti del Centro Storico di ParmaSimone Riccardi
 
Guia De Referencia Y Mantenimiento
Guia De Referencia Y MantenimientoGuia De Referencia Y Mantenimiento
Guia De Referencia Y MantenimientoAntonio Garrido
 
Psychographic Campaign Evaluation Example I Phone 3 G
Psychographic Campaign Evaluation Example I Phone 3 GPsychographic Campaign Evaluation Example I Phone 3 G
Psychographic Campaign Evaluation Example I Phone 3 Gguest5a152
 
Patrones 1º B
Patrones 1º BPatrones 1º B
Patrones 1º Bsanrafael
 
Resolution Strassenhunde
Resolution StrassenhundeResolution Strassenhunde
Resolution Strassenhundeguestc9ee58
 
Bai Giang 12
Bai Giang 12Bai Giang 12
Bai Giang 12nbb3i
 
Education For African Americans
Education For African AmericansEducation For African Americans
Education For African AmericansDietrichL
 
Определения информации
Определения информацииОпределения информации
Определения информацииverunchik
 
PresentacióN Estudiantesnormalboletinweb
PresentacióN EstudiantesnormalboletinwebPresentacióN Estudiantesnormalboletinweb
PresentacióN EstudiantesnormalboletinwebSANSIMON
 
N Gage User Guide
N Gage User GuideN Gage User Guide
N Gage User Guideravikant062
 
Welcome to James Cook University Brisbane
Welcome to James Cook University BrisbaneWelcome to James Cook University Brisbane
Welcome to James Cook University BrisbaneJenJCUB
 
7 Secrets to Facebook Fundraising @ #BarcampAfrica
7 Secrets to Facebook Fundraising @ #BarcampAfrica7 Secrets to Facebook Fundraising @ #BarcampAfrica
7 Secrets to Facebook Fundraising @ #BarcampAfricaSara Waller
 
Mihintale in Sri Lanka
Mihintale in Sri LankaMihintale in Sri Lanka
Mihintale in Sri LankaThilini
 

Viewers also liked (20)

Lossentidos2
Lossentidos2Lossentidos2
Lossentidos2
 
Bihar- Flood Affected Areas Visit Report
Bihar- Flood Affected Areas Visit ReportBihar- Flood Affected Areas Visit Report
Bihar- Flood Affected Areas Visit Report
 
Censimento Prospetti del Centro Storico di Parma
Censimento Prospetti del Centro Storico di ParmaCensimento Prospetti del Centro Storico di Parma
Censimento Prospetti del Centro Storico di Parma
 
Guia De Referencia Y Mantenimiento
Guia De Referencia Y MantenimientoGuia De Referencia Y Mantenimiento
Guia De Referencia Y Mantenimiento
 
Psychographic Campaign Evaluation Example I Phone 3 G
Psychographic Campaign Evaluation Example I Phone 3 GPsychographic Campaign Evaluation Example I Phone 3 G
Psychographic Campaign Evaluation Example I Phone 3 G
 
Patrones 1º B
Patrones 1º BPatrones 1º B
Patrones 1º B
 
Web 2
Web 2Web 2
Web 2
 
viaje
viajeviaje
viaje
 
Resolution Strassenhunde
Resolution StrassenhundeResolution Strassenhunde
Resolution Strassenhunde
 
Bai Giang 12
Bai Giang 12Bai Giang 12
Bai Giang 12
 
Education For African Americans
Education For African AmericansEducation For African Americans
Education For African Americans
 
Определения информации
Определения информацииОпределения информации
Определения информации
 
Desde El Cine
Desde El CineDesde El Cine
Desde El Cine
 
PresentacióN Estudiantesnormalboletinweb
PresentacióN EstudiantesnormalboletinwebPresentacióN Estudiantesnormalboletinweb
PresentacióN Estudiantesnormalboletinweb
 
N Gage User Guide
N Gage User GuideN Gage User Guide
N Gage User Guide
 
Welcome to James Cook University Brisbane
Welcome to James Cook University BrisbaneWelcome to James Cook University Brisbane
Welcome to James Cook University Brisbane
 
7 Secrets to Facebook Fundraising @ #BarcampAfrica
7 Secrets to Facebook Fundraising @ #BarcampAfrica7 Secrets to Facebook Fundraising @ #BarcampAfrica
7 Secrets to Facebook Fundraising @ #BarcampAfrica
 
关键字
关键字关键字
关键字
 
Glossaries and Databases
Glossaries and DatabasesGlossaries and Databases
Glossaries and Databases
 
Mihintale in Sri Lanka
Mihintale in Sri LankaMihintale in Sri Lanka
Mihintale in Sri Lanka
 

More from nbb3i

Bai Giang 11
Bai Giang 11Bai Giang 11
Bai Giang 11nbb3i
 
Bai Giang 9
Bai Giang 9Bai Giang 9
Bai Giang 9nbb3i
 
Bai Giang 7
Bai Giang 7Bai Giang 7
Bai Giang 7nbb3i
 
Bai Giang 1
Bai Giang 1Bai Giang 1
Bai Giang 1nbb3i
 
Bai Giang 2
Bai Giang 2Bai Giang 2
Bai Giang 2nbb3i
 
Bai Giang 4
Bai Giang 4Bai Giang 4
Bai Giang 4nbb3i
 
Bai Giang 3
Bai Giang 3Bai Giang 3
Bai Giang 3nbb3i
 
Bai Giang 5
Bai Giang 5Bai Giang 5
Bai Giang 5nbb3i
 
Bai Giang 6
Bai Giang 6Bai Giang 6
Bai Giang 6nbb3i
 
Bai Giang 10
Bai Giang 10Bai Giang 10
Bai Giang 10nbb3i
 

More from nbb3i (10)

Bai Giang 11
Bai Giang 11Bai Giang 11
Bai Giang 11
 
Bai Giang 9
Bai Giang 9Bai Giang 9
Bai Giang 9
 
Bai Giang 7
Bai Giang 7Bai Giang 7
Bai Giang 7
 
Bai Giang 1
Bai Giang 1Bai Giang 1
Bai Giang 1
 
Bai Giang 2
Bai Giang 2Bai Giang 2
Bai Giang 2
 
Bai Giang 4
Bai Giang 4Bai Giang 4
Bai Giang 4
 
Bai Giang 3
Bai Giang 3Bai Giang 3
Bai Giang 3
 
Bai Giang 5
Bai Giang 5Bai Giang 5
Bai Giang 5
 
Bai Giang 6
Bai Giang 6Bai Giang 6
Bai Giang 6
 
Bai Giang 10
Bai Giang 10Bai Giang 10
Bai Giang 10
 

Recently uploaded

Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
مختصر علم احكام القرآن فقه القرآن وفق منهج العرض
مختصر علم احكام القرآن فقه القرآن وفق منهج العرضمختصر علم احكام القرآن فقه القرآن وفق منهج العرض
مختصر علم احكام القرآن فقه القرآن وفق منهج العرضأنور غني الموسوي
 
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...Nguyen Thanh Tu Collection
 
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...Nguyen Thanh Tu Collection
 
Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaranFAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaransekolah233
 

Recently uploaded (11)

Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
 
Energy drink .
Energy drink                           .Energy drink                           .
Energy drink .
 
مختصر علم احكام القرآن فقه القرآن وفق منهج العرض
مختصر علم احكام القرآن فقه القرآن وفق منهج العرضمختصر علم احكام القرآن فقه القرآن وفق منهج العرض
مختصر علم احكام القرآن فقه القرآن وفق منهج العرض
 
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
 
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
 
Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmi
 
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
 
LAR MARIA MÃE DE ÁFRICA .
LAR MARIA MÃE DE ÁFRICA                 .LAR MARIA MÃE DE ÁFRICA                 .
LAR MARIA MÃE DE ÁFRICA .
 
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
 
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
 
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaranFAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
 

Bai Giang 8

  • 1. Con trỏ 1. Biến và con trỏ 2. Cấp phát và giải phóng bộ nhớ động 3. Mô hình bộ nhớ chương trình 4. Quan hệ giữa mảng và con trỏ 5. Phân biệt tham chiếu và con trỏ 6. Mảng con trỏ. Con trỏ cấu trúc. Con trỏ void 7. Con trỏ làm đối số trong hàm 8. Review 9. Bài tập 1
  • 2. 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 2
  • 3. Biến và con trỏ Mô tả: 1. int a = 5; // a là biến chứa giá trị int 2. int *p; // p là con trỏ int, p là biến chứa địa chỉ 3. p = &a; // p trỏ đến a 4. *p = 7; // gán giá trị qua p a a a 1. Cấp ô nhớ cho a 1001 5 1001 5 1001 7 p p p 2. Cấp ô 1100 1100 1001 1100 1001 nhớ cho p 3. p chứa địa chỉ 4. gán giá trị vào ô của biến a nhớ có địa chỉ trong p 3
  • 4. 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<< *p <<“t”<< a <<endl; *p = 8; cout<< *p <<“t”<< a <<endl; a = 9; cout<< *p <<“t”<< a <<endl; 4
  • 5. Cấp phát và giải phóng bộ nhớ động Biến tĩnh Là biến được cấp vùng nhớ ngay khi lời khai báo được thực hiện Tự động mất đi khi ra khỏi phạm vi khai báo Biến tĩnh thường được sử dụng thông qua tên biến Biến động Là biến được cấp vùng nhớ bất kì khi nào chương trình yêu cầu Bị mất đi khi chương trình giải phóng vùng nhớ Biến động thường được sử dụng thông qua con trỏ 5
  • 6. Cấp phát và giải phóng bộ nhớ động Toán tử new: Cấp phát vùng nhớ int *p, *q, *r; p = new int; // cấp phát ô nhớ cỡ int q = new int(5); // cấp phát đồng thời khởi tạo giá trị r = new int[8]; // cấp phát mảng động Toán tử delete: Giải phóng vùng nhớ delete p; // giải phóng vùng nhớ do p trỏ đến delete[] r; // giải phóng mảng động 6
  • 7. Cấp phát và giải phóng bộ nhớ động Ví dụ: // biến động int *p = new int(5); // cấp phát ô nhớ cout<< *p << endl; delete p; // giải phóng ô nhớ // mảng động int *r = new int[7]; // cấp phát mảng động for(int i = 0; i<7; i++) { r[i] = 3; cout<<r[i]<<endl; } delete[ ] r; // giải phóng mảng động 7
  • 8. Cấp phát và giải phóng bộ nhớ động Chú ý: Khi giải phóng một vùng nhớ thì con trỏ trỏ đến vùng nhớ đó vẫn chứa địa chỉ của vùng nhớ, và như vậy việc truy nhập đến vùng nhớ đã giải phóng là không hợp lệ (về logic). => 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). 8
  • 9. 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<< *p <<quot;tquot;<< *q <<endl; *p = *q + 3; cout<< *p <<quot;tquot;<< *q <<endl; p = q; cout<< *p <<quot;tquot;<< *q <<endl; *p = 7; cout<< *p <<quot;tquot;<< *q <<endl; p = new int; delete p; p = NULL; q = NULL; 9
  • 10. Mô hình bộ nhớ chương trình Khi một chương trình được thực thi (execute), nó có các vùng nhớ như sau: Vùng CODE: Chứa mã lệnh chương trình Vùng DATA: Chứa các biến toàn cục Vùng STACK: Chứa các biến cục bộ Vùng HEAP: Chứa các biến động Kích thước của vùng có thể được thiết đặt trước khi biên dịch. 10
  • 11. Mô hình bộ nhớ chương trình Thử nghiệm: #include <iostream.h> int g; void test(int x) { int c; cout<<“Dia chi cua x la: “<< &x <<endl; cout<<“Dia chi cua c la: “<< &c <<endl; } void main() { int m; cout<<“Dia chi cua m la: ”<< &m <<endl; test(8); cout<<“Dia chi cua g la: ”<< &g <<endl; int *p = new int; cout<<“Dia chi p la: ”<< p <<endl; } 11
  • 12. Mảng và con trỏ Trong C++, mảng là con trỏ hằng trỏ đến một dãy ô nhớ. Ví dụ: int x[7]; int a; int *p; x là một mảng, x là con trỏ hằng trỏ đến ô nhớ đầu tiên của 7 ô nhớ được cấp phát Vì x là con trỏ hằng nên ta không thể thay đổi giá trị địa chỉ mà nó lưu giữ, ví dụ: x = &a; Vì p cũng là con trỏ nên ta có thể gán p = x; x trỏ đến ô nhớ đầu tiên, x+1 trỏ đến ô nhớ tiếp theo... Vậy ta có *(x+1) tương đương với x[1]... 12
  • 13. Mảng và con trỏ Cho biết kết quả của đoạn chương trình sau: int x[5] = {5, 3, 4, 8, 9}; int *p = x; *p = 1; *(p+1) = 7; p[2] = 15; x[3] = p[3] + 2; for(int i=0; i<5; i++) cout<<x[i]<<endl; 13
  • 14. Con trỏ và tham chiếu Con trỏ và tham chiếu hoạt động gần giống nhau song chúng khác nhau. Tham chiếu: Là bí danh của một biến. Con trỏ: Là biến chứa địa chỉ. Có thể tạo tham chiếu tới một biến động. Ví dụ: int *p = new int(3); // tạo biến động int &x = *p; // tạo tham chiếu tới biến động cout<<x<<endl; cout<<&x<<endl<<p; 14
  • 15. Mảng con trỏ Cho biết kết quả của đoạn chương trình sau: int *r[5]; // khai báo mảng 5 con trỏ int i; for(i=0; i<5; i++) { r[i] = new int(i*2); // cấp phát vùng nhớ cho từng con trỏ cout<<*(r[i])<<endl; } for(i=0; i<5; i++) { delete r[i]; // giải phóng vùng nhớ r[i] = NULL; } 15
  • 16. Con trỏ cấu trúc Ví dụ cấu trúc Hàng hoá struct Hanghoa { int soluong; float dongia; }; ... Hanghoa x; Hanghoa *p, *q; p = &x; q = new Hanghoa; q->soluong = 7; // giống (*q).soluong = 7; q->dongia = 20.50; // giống (*q).dongia = 20.50; 16
  • 17. 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 cout<< *((int *) p); // ép kiểu để lấy giá trị int p = new Hanghoa; // p trỏ đến một vùng nhớ kiểu Hanghoa cout<< ((Hanghoa *) p)->soluong; // é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 cout<< ((Hinhtron *) p)->LayDientich(); // ép kiểu Hinhtron 17
  • 18. 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); } 18
  • 19. 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; } 19
  • 20. 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); 20
  • 21. Review 1. Biến và con trỏ khác nhau thế nào ? 2. Phân biệt biến tĩnh và biến động ? 3. Nêu các vùng nhớ của chương trình ? 4. Trong C++, mảng là con trỏ như thế nào ? 5. Tham chiếu khác con trỏ như thế nào ? 6. Con trỏ void là gì ? 7. Nêu một số ví dụ về sử dụng con trỏ hàm ? 21
  • 22. Bài tập về nhà 1. 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. 2. Hoàn chỉnh lớp Sinhvien đã học với các phương thức cần thiết. 3. 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. 22