Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer)

L.O.6.1 – Khai báo được con trỏ.

L.O.6.2 – Truy xuất được dữ liệu qua con trỏ.

L.O.6.3 – Giải thích được cách cấp phát bộ nhớ động.

L.O.6.4 – Sử dụng được các phép toán trên con trỏ.

L.O.6.5 – Sử dụng được con trỏ của con trỏ khác.

L.O.6.6 – Dùng được con trỏ với kiểu cấu trúc.

L.O.6.7 – Hiểu được sự liên quan giữa con trỏ và mảng.

Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) trang 1

Trang 1

Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) trang 2

Trang 2

Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) trang 3

Trang 3

Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) trang 4

Trang 4

Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) trang 5

Trang 5

Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) trang 6

Trang 6

Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) trang 7

Trang 7

Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) trang 8

Trang 8

Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) trang 9

Trang 9

Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer) trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 17 trang xuanhieu 8280
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer)

Bài giảng Nhập môn về lập trình - Chương 8: Con trỏ (Pointer)
 Chương 8 
 Con trỏ(Pointer) 
 Presenter: 
Nhập môn về lập trình (C8) Slide 1 
 Learning outcomes 
 L.O.6.1 – Khai báo được con trỏ. 
 L.O.6.2 – Truy xuất được dữ liệu qua con trỏ. 
 L.O.6.3 – Giải thích được cách cấp phát bộ nhớ động. 
 L.O.6.4 – Sử dụng được các phép toán trên con trỏ. 
 L.O.6.5 – Sử dụng được con trỏ của con trỏ khác. 
 L.O.6.6 – Dùng được con trỏ với kiểu cấu trúc. 
 L.O.6.7 – Hiểu được sự liên quan giữa con trỏ và mảng. 
Nhập môn về lập trình (C8) Slide 2 
 Kiểu con trỏ(pointer) 
 Định nghĩa 
  Kiểu con trỏ là kiểu biến đặc biệt chỉ dùng để giữ địa chỉ 
 (tham khảo). Dùng dấu * để định nghĩa. 
 Ví dụ: 
  Toán tửtử '&''&' chocho phépphép gágánn địađịa chỉchỉ củacủa mộtmột biến vào con trỏ 
 như sau : 
 = & 
 Ví dụ : 
  Con trỏ biến được dùng lưu giữ địa chỉ các biến và cho 
 phép truy xuất biến một cách gián tiếp. 
  Ứng dụng thường dùng là tham số hàm. 
Nhập môn về lập trình (C8) Slide 3 
 Kiểu con trỏ(pointer) 
 Ví dụ 1 
Nhập môn về lập trình (C8) Slide 4 
 Con trỏ biến cấu trúc 
 Tham số hàm kiểu con trỏ cấu trúc 
Nhập môn về lập trình (C8) Slide 5 
 Pointer và cấp phát động 
 Ý tưởng 
  Kiểu pointer rất thích hợp để quản lý dữ liệu có độ lớn chưa 
 biết trước tại thời điểm lập trình. 
  Ví dụ : 
 double param[100][100]; // cấp phát 10.000 phần tử kiểu double 
 hay 
 double** param; // chỉ cấp phát 1 pointer 
 (double**) (double) 
 (double*) 
Nhập môn về lập trình (C8) Slide 6 
 Pointer và cấp phát động 
 hiện thực 
  Sau khi có con trỏ đến ma trận, để có ma trận thực sự, ta dùng 
 hàm malloc (memory allocation) trong thư viện malloc.lib 
 (#include malloc.h) để sinh ra các vector và phần tử. 
  Ví dụ : 
 • Sinh ra m vector (m chưa biết trước) 
 printf ("Nhap M: "); scanf_s("%d", &m); 
 param = (double**) malloc(m * sizeof(double*)); 
 • Sinh ra n phần tử trong mỗi vector (n chưa biết trước) 
 printf ("Nhap N: "); scanf_s("%d", &n); 
 for (i = 0; i < m; i++) 
 param[i] = (double*) malloc(n * sizeof(double)); 
  Chú ý toán tử sizeof(kiểu) trả về kích thước kiểu cần cấp 
 phát trong bộ nhớ. 
Nhập môn về lập trình (C8) Slide 7 
 Pointer và cấp phát động 
 Ví dụ 
Nhập môn về lập trình (C8) Slide 8 
 Ví dụthêm vềcon trỏ 
  int* pi; // pointer to int 
  char** ppc ; // pointer to pointer to char 
  int* ap[15]; // array of 15 pointers to ints 
  int (*fp)(char*); // pointer to function taking a char* 
 // argument; returns an int 
  int* f(char*); // function taking a char* argument; 
 // returns a pointer to int 
Nhập môn về lập trình (C8) Slide 9 
 Pointers to strings 
 Đúng hay sai ? 
  char *psz; 
 psz = “File not ready”; 
  char *psz = “File not ready”; 
 char pszarray[ ] = “Drive not ready”; 
  char pszarray[16]; 
 pszarray = “Drive not ready”; 
  char *psz; 
 scanf_s(“%s”,psz); 
Nhập môn về lập trình (C8) Slide 10 
 Pointer arithmetic and arrays 
 Ví dụ 1 
Nhập môn về lập trình (C8) Slide 11 
 Pointer arithmetic and arrays 
 Ví dụ 2 
Nhập môn về lập trình (C8) Slide 12 
 Con trỏ và hằng 
 void f1 (char *p) 
 { char s[] = "Gorm"; 
 const char* pc=s ; // con trỏ đến một hằng 
 pc[3]=´g´; // sai: không thể thay đổi nội dung 
 pc=p; // ok: có thể thay đổi địa chỉ 
 char *const cp=s; // hằng con trỏ 
 cp[3]=´a´; // ok: có thể thay đổi nội dung 
 cp=p; // sai: không thể thay đổi địa chỉ 
 const char *const cpc=s; // hằng con trỏ đến một hằng 
 cpc[3]=´a´; // sai: không thể thay đổi nội dung 
 cpc=p ; // sai: lẫn địa chỉ 
 } 
 *const là toán tử khai báo hằng con trỏ (không có toán tử const*). 
Nhập môn về lập trình (C8) Slide 13 
 Phép toán trên pointer 
 Kết quả nhận được là gì? 
  Thường dùng (pointer + integer) 
  Có thể trừ số nguyên vào con trỏ (pointer - integer) 
  Có thể trừ hai con trỏ (pointer - pointer) 
  Có thể so sánh hai con trỏ với nhau (=) 
Nhập môn về lập trình (C8) Slide 14 
 Con trỏ đến hàm 
Nhập môn về lập trình (C8) Slide 15 
 Dãy con trỏ hàm 
 Khái niệm 
  Dãy con trỏ hàm thích hợp với các bài toán xử lý theo sơ 
 đồ chuyển trạng thái. 
 Gọi hàm xuly[0] () 
 00 
 Nhập 
 số N 
 In kết 
 quả 
 Tính 
 toán 01 02 
 Gọi hàm xuly[2] () 
 Gọi hàm xuly[1] () 
Nhập môn về lập trình (C8) Slide 16 
 Dãy con trỏ hàm 
 Ví dụ 
  Sửa lại hàm tinhdiem_tk() để dùng dãy con trỏ hàm. 
  Chương trình dùng dãy con trỏ hàm 
Nhập môn về lập trình (C8) Slide 17 

File đính kèm:

  • pdfbai_giang_nhap_mon_ve_lap_trinh_chuong_8_con_tro_pointer.pdf