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ỏ 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ꢎ:  
Tooáánn tt''&'' 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>  
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 dꢊ liꢇu độ lớn chưa  
biꢅt trước tại thꢓi điꢁm lập trình.  
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ử.  
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  
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  
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 ;  
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*).  
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ꢞ ?  
(pointer + integer)  
Thưꢓng dꢉng  
thꢁ trừ sꢔ nguyên vào con trꢀ (pointer - integer)  
thꢁ trừ hai con trꢀ  
(pointer - pointer)  
(<=, =, >=)  
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  
02  
01  
toꢆn  
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  
pdf 17 trang yennguyen 08/04/2022 30180
Bạn đang xem 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