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ꢎ:
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>
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 ;
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
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
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
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:
- bai_giang_nhap_mon_ve_lap_trinh_chuong_8_con_tro_pointer.pdf