intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Phương pháp lập trình - Chương 5: Con trỏ (2016)

Chia sẻ: Bình Yên | Ngày: | Loại File: PPT | Số trang:46

76
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Phương pháp lập trình - Chương 5: Con trỏ trình bày địa chỉ con trỏ, khái niệm và khai báo biến con trỏ, toán tử con trỏ, các thao tác trên biến con trỏ, cấp phát và giải phóng bộ nhớ, con trỏ và mảng, mảng con trỏ. Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Phương pháp lập trình - Chương 5: Con trỏ (2016)

  1. Chương 5
  2. Nội dung trình bày 1. Địa chỉ 2. Khái niệm và khai báo biến con trỏ 3. Toán tử con trỏ  4. Các thao tác trên biến con trỏ 5. Cấp phát và giải phóng bộ nhớ 6. Con trỏ và mảng 7. Mảng con trỏ 2
  3. 1. Địa chỉ (Address)  Mỗi biến đều có 2 thuộc tính: địa chỉ (address) và  giá trị (value) ◦Ví dụ: int i=11, j=22, k=33; Trong bộ nhớ: + Tại địa chỉ 53AD78 có giá trị là 11 + Tại địa chỉ 53AD7C có giá trị là 22 + Tại địa chỉ 53AD80 có giá trị là 33  Để lấy địa chỉ của 1 biến: dùng dấu & trước tên  biến. Ví dụ:… 3
  4. Nội dung trình bày 1. Địa chỉ 2. Khái niệm và khai báo biến con trỏ 3. Toán tử con trỏ  4. Các thao tác trên biến con trỏ 5. Cấp phát và giải phóng bộ nhớ 6. Con trỏ và mảng 7. Mảng con trỏ 4
  5. 2. Khái niệm và khai báo con trỏ  Khái niệm con trỏ:  Là một biến mà giá trị của nó  chứa một địa chỉ  Cách  khai  báo  biến  con  trỏ:  tương  tự  khai  báo  biến  thông  thường,  có  thêm  dấu  *  vào  trước  tên  biến  Ví dụ: int *ia; int x, *p, *q;  Không  được  dùng  biến  con  trỏ  khi  con  trỏ  chưa  được khởi tạo giá trị  Giá trị gán cho con trỏ phải là một địa chỉ, ví dụ: p = &x; 5
  6. 2. Khái niệm và khai báo con trỏ:      Ví dụ int i=11, j=22, k=33; int *iPtr, *jPtr, *kPtr; iPtr = &i; jPtr = &j; iPtr, jPtr là 2 biến con trỏ lần  lượt chứa địa chỉ của i, j Vậy: nếu gán iPtr = i  là sai 6
  7. Nội dung trình bày 1. Địa chỉ 2. Khái niệm và khai báo biến con trỏ 3. Toán tử con trỏ  4. Các thao tác trên biến con trỏ 5. Cấp phát và giải phóng bộ nhớ 6. Con trỏ và mảng 7. Mảng con trỏ 7
  8. 3. Toán tử con trỏ  Toán tử *  : lấy  giá trị tại địa chỉ chứa trong biến con  trỏ  Ví dụ: 1234 10 50 i int i;  1236 int *ia;  1238 i = 10;  1240 ia 1234 ia = &i;  cout
  9. 3. Toán tử con trỏ: Ví dụ #include  // kết quả xuất ra màn hình #include  a = 15 void main () b = 20 { int a = 20, b = 15, *pa, *pb, temp; pa = &a;  // con trỏ pa chứa địa chỉ của a pb = &b;  // con trỏ pb chứa địa chỉ của b temp = *pa; *pa = *pb; *pb = temp; cout 
  10. Nội dung trình bày 1. Địa chỉ 2. Khái niệm và khai báo biến con trỏ 3. Toán tử con trỏ  4. Các phép toán số học trên con trỏ 5. Cấp phát và giải phóng bộ nhớ 6. Con trỏ và mảng 7. Mảng con trỏ 10
  11. 4. Các phép toán số học trên con  trỏ  Phép gán  Phép cộng, trừ một con trỏ với một số nguyên  Phép tăng, giảm 11
  12. 4. Các phép toán số học trên con  trỏ (tt)  Phép gán con trỏ ◦Hai biến con trỏ cùng kiểu có thể gán cho nhau  Ví dụ: int x; int *p1, *p2; p1 = &x; p2 = p1; Sau khi đoạn lệnh trên được thực hiện, cả p1 và  p2 cùng trỏ đến biến x 12
  13. 4. Các phép toán số học trên con  trỏ (tt)  Phép cộng, trừ một con trỏ với một số nguyên ◦Khi cộng hoặc trừ 1 con trỏ với 1 số nguyên N; kết  quả trả về là 1 con trỏ ◦Con  trỏ  này  sẽ  chỉ  đến  vùng  nhớ  cách  vùng  nhớ  của  con  trỏ  hiện tại một  số  nguyên lần kích thước  của kiểu dữ liệu của nó 13
  14. 4. Các phép toán số học trên con  trỏ (tt) Ví dụ : char *a; short *b; long *c;  Giả sử các con trỏ a, b, c lần lượt trỏ tới ô nhớ 1000,  2000 và 3000 a = a + 1; // con trỏ a dời đi 1 byte b = b + 1; // con trỏ b dời đi 2 byte  c = c + 1;  // con trỏ c dời đi 4 byte 14
  15. 4. Các phép toán số học trên con  trỏ (tt) 15
  16. Nội dung trình bày 1. Địa chỉ 2. Khái niệm và khai báo biến con trỏ 3. Toán tử con trỏ  4. Các phép toán số học trên con trỏ 5. Cấp phát và giải phóng bộ nhớ 6. Con trỏ và mảng 7. Mảng con trỏ 16
  17. 5. Cấp phát và giải phóng bộ nhớ  Cấp  phát  động  là  phương  tiện  nhờ  đó  một  chương  trình  có  thể  dành  thêm  bộ  nhớ  trong  khi  đang  thực  thi  hoặc  giải  phóng  bộ  nhớ  khi  không  cần thiết  C/C++  có  hai  hệ  thống  cấp  phát  động:  một  hệ  thống  được  định  nghĩa  bởi  C  và  một  được  định  nghĩa bởi C++ 17
  18. 5. Cấp phát và giải phóng bộ nhớ  Cấp  phát  và  giải  phóng  bộ  nhớ  động  được  định  nghĩa bởi C, trong thư viện stdlib.h ◦void *malloc(length): dùng để cấp phát bộ nhớ  length: là số byte muốn cấp phát  Hàm malloc() trả về một con trỏ có kiểu void, do đó có  thể ép kiểu nó cho con trỏ có kiểu bất kỳ  Sau khi cấp phát thành công, hàm  malloc() trả về  địa  chỉ của byte đầu tiên của vùng nhớ. Nếu không thành  công (không có đủ vùng nhớ), hàm malloc() trả về null ◦void  free(void  *p):  dùng  để  thu  hồi  bộ  nhớ  được  cấp phát bởi hàm malloc 18
  19. 5. Cấp phát và giải phóng bộ nhớ  Ví dụ 1: char *p; p = (char *) malloc(1000);  //cấp phát 1000 bytes   Vì  hàm malloc() trả  về  con trỏ  kiểu  void,  nên  phải  ép kiểu nó thành con trỏ  char  cho phù hợp  với biến con trỏ p  Ví dụ 2: int *p; p = (int *) malloc(50*sizeof(int)); … free(p); 19
  20. 5. Cấp phát và giải phóng bộ nhớ  Cấp phát và giải phóng bộ nhớ động được định  nghĩa bởi C++ ◦Toán tử new cấp phát bộ nhớ và trả về một con trỏ  đến byte đầu tiên của vùng nhớ được cấp phát ◦Toán tử delete thu hồi vùng nhớ được cấp phát  trước đó bởi toán tử new 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2