Chng 8 Con tro Pointer Presenter Nhp mn

  • Slides: 17
Download presentation
Chương 8 Con tro (Pointer) Presenter: Nhập môn về lập trình (C 8) Slide

Chương 8 Con tro (Pointer) Presenter: Nhập môn về lập trình (C 8) Slide 1

Learning outcomes L. O. 6. 1 – Khai báo được con trỏ. L. O.

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 (C 8) Slide 2

Kiê u con tro (pointer) Đi nh nghi a v Kiểu con trỏ la

Kiê u con tro (pointer) Đi nh nghi a v Kiểu con trỏ la kiê u biê n đă c biê t chi du ng đê giư đi a chi (tham kha o). Du ng dâ u * đê đi nh nghi a. Vi du : v Toán tử '&' cho phép ga n địa chỉ của một biến va o con tro như sau : <con tro > = &<tên biến> Ví dụ : v Con tro biê n đươ c du ng lưu giư đi a chi ca c biê n va cho phe p truy xuâ t biê n mô t ca ch gia n tiê p. v Ư ng du ng thươ ng du ng la tham sô ha m. Nhập môn về lập trình (C 8) Slide 3

Kiê u con tro (pointer) Vi du 1 Nhập môn về lập trình (C

Kiê u con tro (pointer) Vi du 1 Nhập môn về lập trình (C 8) Slide 4

Con tro biê n câ u tru c Tham sô ha m kiê u

Con tro biê n câ u tru c Tham sô ha m kiê u con tro câ u tru c Nhập môn về lập trình (C 8) Slide 5

Pointer va câ p pha t đô ng Y tươ ng v Kiểu pointer

Pointer va câ p pha t đô ng Y tươ ng v 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 Ví dụ : double param[100]; // câ p pha t 10. 000 phần tử kiê u double hay double** param; // chi câ p pha t 1 pointer (double) (double**) (double*) Nhập môn về lập trình (C 8) A T N Ậ R M Slide 6

Pointer va câ p pha t đô ng hiê n thư c v Sau

Pointer va câ p pha t đô ng hiê n thư c v Sau khi co con tro đê n ma trâ n, đê co ma trâ n thư c sư , ta du ng ha m malloc (memory allocation) trong thư viê n malloc. lib (#include malloc. h) đê sinh ra ca c vector va phâ n tư. v 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)); v Chu y toa n tư sizeof(kiê u) tra vê ki ch thươ c kiê u câ n câ p pha t trong bô nhơ. Nhập môn về lập trình (C 8) Slide 7

Pointer va câ p pha t đô ng Vi du Nhập môn về lập

Pointer va câ p pha t đô ng Vi du Nhập môn về lập trình (C 8) Slide 8

Ví du thêm vê con tro v int* pi; // pointer to int v

Ví du thêm vê con tro v int* pi; // pointer to int v char** ppc ; // pointer to char v int* ap[15]; // array of 15 pointers to ints v int (*fp)(char*); // pointer to function taking a char* // argument; returns an int v int* f(char*); // function taking a char* argument; // returns a pointer to int Nhập môn về lập trình (C 8) Slide 9

Pointers to strings Đu ng hay sai ? v char *psz; psz = “File

Pointers to strings Đu ng hay sai ? v char *psz; psz = “File not ready”; v char *psz = “File not ready”; char pszarray[ ] = “Drive not ready”; v char pszarray[16]; pszarray = “Drive not ready”; v char *psz; scanf_s(“%s”, psz); Nhập môn về lập trình (C 8) Slide 10

Pointer arithmetic and arrays Vi du 1 Nhập môn về lập trình (C 8)

Pointer arithmetic and arrays Vi du 1 Nhập môn về lập trình (C 8) Slide 11

Pointer arithmetic and arrays Vi du 2 Nhập môn về lập trình (C 8)

Pointer arithmetic and arrays Vi du 2 Nhập môn về lập trình (C 8) Slide 12

Con tro va hă ng void f 1 (char *p) { char s[] =

Con tro va hă ng void f 1 (char *p) { char s[] = "Gorm"; const char* pc=s ; pc[3]=´g´; pc=p; // con tro đê n mô t hă ng // sai: không thê thay đô i nô i dung // ok: co thê thay đô i đi a chi char *const cp=s; cp[3]=´a´; cp=p; // hă ng con tro // ok: co thê thay đô i nô i dung // sai: không thê thay đô i đi a chi const char *const cpc=s; cpc[3]=´a´; cpc=p ; // hă ng con tro đê n mô t hă ng // sai: không thê thay đô i nô i dung // sai: lâ n đi a chi } *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 (C 8) Slide 13

Phép toán trên pointer Kê t qua nhâ n đươ c la gi ?

Phép toán trên pointer Kê t qua nhâ n đươ c la gi ? v Thường dùng (pointer + integer) v Có thể trừ số nguyên vào con trỏ (pointer - integer) v Có thể trừ hai con trỏ (pointer - pointer) v Có thể so sánh hai con trỏ với nhau Nhập môn về lập trình (C 8) (<=, =, >=) Slide 14

Con tro đê n ha m Nhập môn về lập trình (C 8) Slide

Con tro đê n ha m Nhập môn về lập trình (C 8) Slide 15

Da y con tro ha m Kha i niê m v Da y con

Da y con tro ha m Kha i niê m v Da y con tro ha m thi ch hơ p vơ i ca c ba i toa n xư ly theo sơ đô chuyê n tra ng tha i. Nhâ p sô N Ti nh toa n 01 Go i ha m xuly[1] () Nhập môn về lập trình (C 8) 00 Go i ha m xuly[0] () In kê t qua 02 Go i ha m xuly[2] () Slide 16

Da y con tro ha m Vi du v Sư a la i ha

Da y con tro ha m Vi du v Sư a la i ha m tinhdiem_tk() đê du ng da y con tro ha m. v Chương tri nh du ng da y con tro ha m Nhập môn về lập trình (C 8) Slide 17