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:  
Slide 1  
Nhập môn về lập trình (C8)  
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.  
Slide 2  
Nhập môn về lập trình (C8)  
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ử '&' cho phép gán địa chỉ của một biến vào con trỏ  
như sau :  
<con trỏ> = &<tên biến>  
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 con trỏ là tham số hàm.  
Slide 3  
Nhập môn về lập trình (C8)  
Con trỏ biến số (pointer)  
Ví dụ 1  
Slide 4  
Nhập môn về lập trình (C8)  
Con trỏ biến cấu trúc  
Ví dụ con trỏ là tham số hàm  
Định nghĩa kiểu  
Định nghĩa kiểu  
KieuHoso.h  
Định nghĩa biến  
Định nghĩa biến  
main.c  
Khai báo biến  
Khai báo biến  
Ham.h  
Slide 5  
Nhập môn về lập trình (C8)  
Con trỏ biến cấu trúc  
Ví dụ con trỏ là tham số hàm  
main.c  
Slide 6  
Nhập môn về lập trình (C8)  
Con trỏ biến cấu trúc  
Ví dụ con trỏ là tham số hàm  
Ham.c  
Slide 7  
Nhập môn về lập trình (C8)  
Con trỏ biến cấu trúc  
Chạy thử  
Slide 8  
Nhập môn về lập trình (C8)  
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*)  
Slide 9  
Nhập môn về lập trình (C8)  
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("%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("%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ớ.  
Slide 10  
Nhập môn về lập trình (C8)  
Pointer và cấp phát động  
Ví dụ thư viện Malloc.lib  
Slide 11  
Nhập môn về lập trình (C8)  
Ví dụ thêm về con trỏ  
int* pi;  
// pointer to int  
char** ppc ;  
int* ap[15];  
// pointer to pointer to char  
// 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  
Slide 12  
Nhập môn về lập trình (C8)  
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”,psz);  
Slide 13  
Nhập môn về lập trình (C8)  
Pointer arithmetic and arrays  
Ví dụ nhập/xuất dãy ký tự theo phần tử  
Slide 14  
Nhập môn về lập trình (C8)  
Pointer arithmetic and arrays  
Ví dụ 2 xử lý chuỗi theo con trỏ  
Slide 15  
Nhập môn về lập trình (C8)  
Con trỏ và hằng  
void f1 (char *p)  
{ char s[] = "Gorm";  
const char* pc=s ;  
pc[3]=´g´;  
// con trỏ đến một hằng  
// sai: không thể thay đổi nội dung  
// ok: có thể thay đổi địa chỉ  
pc=p;  
char *const cp=s;  
cp[3]=´a´;  
cp=p;  
// hằng con trỏ  
// ok: có thể thay đổi nội dung  
// sai: không thể thay đổi địa chỉ  
const char *const cpc=s;  
cpc[3]=´a´;  
cpc=p ;  
// hằng con trỏ đến một hằng  
// sai: không thể thay đổi nội dung  
// sai: lẫn địa chỉ  
}
*const là toán tử khai báo hằng con trỏ (không có toán tử const*).  
Slide 16  
Nhập môn về lập trình (C8)  
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  
Slide 17  
Nhập môn về lập trình (C8)  
Con trỏ đến hàm  
Ví dụ nhập/xuất hồ sơ điểm  
main.c  
Slide 18  
Nhập môn về lập trình (C8)  
Con trỏ đến hàm  
Module Ham.c  
Slide 19  
Nhập môn về lập trình (C8)  
Con trỏ đến hàm  
Module Ham.h và KieuHoso.h  
Ham.h  
KieuHoso.h  
Slide 20  
Nhập môn về lập trình (C8)  
Tải về để xem bản đầy đủ
pdf 23 trang myanh 22680 Free
Bạn đang xem 20 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

File đính kèm:

  • pdfbai_giang_nhap_mon_ve_lap_trinh_chuong_8_con_tro_pointer.pdf