Bài giảng nhập môn lập trình con trỏ, chuỗi trần phước tuấn

17 148 0
Bài giảng nhập môn lập trình con trỏ, chuỗi   trần phước tuấn

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

NMLT CON TR , CHU I Tr n Ph c Tu n tranphuoctuan.khoatoan.dhsp@gmail.com http://baigiang.tranphuoctuan.com Con tr – Pointer Khai báo Các toá toán t “&”, “*”, “=”, “+” Nh c l i v truy n tham s a ch Con tr m ng C p phát vùng nh ng NH P MÔN L P TRÌNH 12/23/2009 Con tr – M t s lý nên s d ng Con tr ki u d li u l u tr a ch c a vùng d li u b nh máy tính Ki u tr cho phép: Truy n tham s ki u a ch Bi u di n ki u, c u trúc d li u ng u tr d li u vùng nh heap Con tr ã c s d ng hàm scanf NH P MÔN L P TRÌNH 12/23/2009 Con tr – Khai báo C Ki u tr ph i c nh ngh a tr c int //PINT ki u tr - int PINT int NH P MÔN L P TRÌNH ã c ó typedef ki uc s typedef nh ngh a m t ki u c s *Tênki u; *PINT; a ch vùng nh ki u int x; p; //p, p1: bi n ki u int * *p1; 12/23/2009 Con tr – Khai báo C int int *pi; *pi; long long int int *p; *p; float* float* pf; pf; char char c, c, d, d, *pc; *pc; /* /* cc và dd ki ki uu char char pc nn char pc là con tr tr char */ */ double* double* pd, pd, e, e, f; f; char char /* /* pd pd là ee and and nn double tr tr double ff are are double double */ */ *start, *start, *end; *end; NH P MÔN L P TRÌNH 12/23/2009 Con tr - Toán t “&” “&”: toán t l y a ch c a bi n a ch c a t t c bi n ch c ch nh t khai báo ng trình u ã char char gg == 'z'; 'z'; int int main() main() {{ char char cc == 'a'; 'a'; char *p; char *p; pp == &c; &c; pp == &g; &g; return return 0; 0; }} NH P MÔN L P TRÌNH p 0x1132 p 0x91A2 12/23/2009 c 0x1132 'a' g 0x91A2 'z' Con tr - Toán t “*” “*”: toán t truy xu t giá tr c a vùng nh b i tr #include #include char g = 'z'; char g = 'z'; int int main() main() {{ char char cc == 'a'; 'a'; char *p; char *p; pp == &c; &c; printf("%c\n", printf("%c\n", pp == &g; &g; printf("%c\n", printf("%c\n", return return 0; 0; }} c qu n lý p 0x1132 aa zz *p); *p); NH P MÔN L P TRÌNH 0x1132 'a' g p 0x91A2 *p); *p); c 0x91A2 'z' xu t giá tr p ang qu n lý 12/23/2009 Con tr - Truy n tham s a ch #include #include void void change(int change(int *v); *v); int int main() main() {{ int int var var == 5; 5; change(&var); change(&var); printf("main: printf("main: var var == %i\n", %i\n", var); var); return 0; return 0; }} void voidchange(int change(int *v) *v) {{ (*v) (*v) *= *= 100; 100; printf("change: printf("change: *v *v == %i\n", %i\n", (*v)); (*v)); }} NH P MÔN L P TRÌNH 12/23/2009 Con tr NULL Giá tr c bi t ch r ng tr không qu n lý vùng Giá tr th ng c dùng ch m t tr không h p l #include #include int main() int main() {{ int int ii == 13; 13; short *p short *p == NULL; NULL; if (p == NULL) if (p == NULL) printf(“Con printf(“Con tr tr không không hh pp else else printf(“Giá printf(“Giá tr tr :: %hi\n", %hi\n", return 0; return 0; }} NH P MÔN L P TRÌNH ll !\n"); !\n"); *p); *p); 12/23/2009 Con tr - Toán t gán “=” Có s khác bi t r t quan tr ng th c hi n phép gán: int int ii == 10, 10, jj == 14; 14; int* int* pp == &i; &i; int *q = &j; int *q = &j; *p *p == *q; *q; p 0x15A0 q 0x15A4 i 10 14 0x15A0 j 14 0x15A4 và: int int int int int int ii == 10, 10, jj == 14; 14; *p = &i; *p = &i; *q *q == &j; &j; pp == q; q; NH P MÔN L P TRÌNH p 0x15A4 0x15A0 q 0x15A4 12/23/2009 i 0x15A0 j 0x15A4 10 14 10 Luy n t p – i n vào ô tr ng int int main(void) main(void) {{ int int ii == 10, 10, jj == 14, 14, k; k; int *p = &i; int *p = &i; int int *q *q == &j; &j; *p *p += += 1; 1; pp == &k; &k; *p = *p = *q; *q; pp == q; q; *p *p == *q; *q; return return 0; 0; i 0x2100 j 0x2104 k 0x1208 p 0x120B q 0x1210 }} NH P MÔN L P TRÌNH 11 12/23/2009 Con tr M ng Bi n ki u m ng a ch t nh c a m t vùng nh , c xác nh khai báo, không thay i su t chu k s ng Bi n tr a ch ng c a m t vùng nh , c xác nh qua phép gán a ch ch ng trình th c thi #include #include int main() int main() {{ int int a[10] a[10] == {1, {1, 3, 3, 4, 4, 2, 2, int *p; int *p; pp == a; a; //a //a == p: p: sai sai printf(“0x%04X printf(“0x%04X %i %i 0x%04X 0x%04X a, a[0], p, a, a[0], p, *p); *p); return 0; return 0; }} NH P MÔN L P TRÌNH 12/23/2009 0}; 0}; %i\n“, %i\n“, ); ); 12 Con tr - Toán t “+” v i s nguyên #include #include int main() int main() {{ short short a[10] a[10] == {1, {1, 3, 3, 5, 5, 2, 2, 0}; 0}; short *p = a; short *p = a; printf(“0x%04X printf(“0x%04X %i %i 0x%04X 0x%04X %i\n“, %i\n“, a, a[0], p, *p); a, a[0], p, *p); pp ++; ++; printf(“0x%04X printf(“0x%04X %i %i 0x%04X 0x%04X %i\n“, %i\n“, a, a[0], p, *p); a, a[0], p, *p); (*p) ++; (*p) ++; printf(“0x%04X printf(“0x%04X %i %i 0x%04X 0x%04X %i\n“, %i\n“, a, a[0], p, *p); a, a[0], p, *p); return 0; return 0; }} NH P MÔN L P TRÌNH 0x15A0 a ); ); … ); ); ); ); 0x16B2 p 0x15A0 0x15A2 13 12/23/2009 Con tr - Luy n t p #include #include int main() int main() {{ int int a[10] a[10] == {2, {2, 3, 3, 5, 5, 1, 1, 4, 4, 7, 7, 0}; 0}; int *p = a; int *p = a; printf(“%i printf(“%i %i\n“, %i\n“, a[0], a[0], *p); *p); pp ++; ++; printf(“%i printf(“%i %i\n“, %i\n“, *p, *p, p[2]); p[2]); pp ++; a[2] = 9; ++; a[2] = 9; printf(“%i printf(“%i %i\n“, %i\n“, p[1], p[1], *p); *p); pp -= 2; -= 2; printf(“%i printf(“%i %i\n”, %i\n”, p[3], p[3], p[1]); p[1]); return return 0; 0; }} NH P MÔN L P TRÌNH 12/23/2009 22 33 11 11 22 11 99 33 14 Con tr - C p phát vùng nh ng Có th ch nh vùng m i cho tr qu n lý b ng l nh hàm malloc, calloc ho c toán t new c a C++ Vùng nh l p trình viên ch nh ph i c gi i phóng b ng l nh free (malloc, calloc) ho c toán t delete (new) #include #include int main() int main() {{ int int *p *p == new new int[10]; int[10]; p[0] = 1; p[0] = 1; p[3] p[3] == -7; -7; delete []p; delete []p; return return 0; 0; }} NH P MÔN L P TRÌNH Tóm l 12/23/2009 15 c Khai báo Các toá toán t “&”, “*”, “=”, “+” Nh c l i v truy n tham s a ch Con tr m ng C p phát vùng nh ng NH P MÔN L P TRÌNH 12/23/2009 16 Chu i ký t - String Chu i ký t – Strings M t s qui t c Nh p / xu t Con tr chu i ký t M t s hàm th vi n NH P MÔN L P TRÌNH 12/23/2009 18 Chu i ký t - M t s qui t c Chu i ký t m ng m t chi u có m i thành ph n m t s nguyên c k t thúc b i s Ký t k t thúc (0) cu i chu i ký t th ng c g i ký t null (không gi ng tr NULL) Có th ghi ho c ‘\0’ (không ph i ch o) c khai bá báo và truy n tham s nh m ng m t chi u char char unsigned unsigned char char NH P MÔN L P TRÌNH s[100]; s[100]; s1[1000]; s1[1000]; 19 12/23/2009 Chu i ký t - Ví d char char first_name[5] first_name[5] == {{ 'J', 'J', 'o', 'o', 'h', 'h', 'n', 'n', '\0' '\0' }; }; char char last_name[6] last_name[6] == "Minor"; "Minor"; char char other[] other[] == "Tony "Tony Blurt"; Blurt"; char char characters[7] characters[7] == "No "No null"; null"; first_name 'J' 'o' 'h' 'n' last_name 'M' 'i' 'n' 'o' 'r' other 'T' 'o' ‘n’ 'y' 32 'B' characters NH P MÔN L P TRÌNH 'N' 'o' 32 'n' 'u' 'l' 12/23/2009 'l' 'u' 'l' 'r' 't' 20 Chu i ký t - Nh p / xu t Có th nh p / xu t chu i ký t s b ng cách nh p t ng ký t c as Ho c s d ng hàm scanf printf v i ký t nh d ng “%s” char char other[] other[] == "Tony "Tony Blurt"; Blurt"; printf("%s\n", printf("%s\n", other); other); Nh p chu i có kho ng tr ng dùng hàm gets char char name[100]; name[100]; printf("Nhap printf("Nhap mot mot chuoi chuoi ky ky tu tu %s: %s: "); "); gets(name); gets(name); NH P MÔN L P TRÌNH 21 12/23/2009 u ý: k t thúc chu i #include #include int int main() main() {{ char char other[] other[] == "Tony "Tony Blurt"; Blurt"; "Blurt" s không c in printf("%s\n", printf("%s\n", other); other); other[4] other[4] == '\0'; '\0'; printf("%s\n", printf("%s\n", other); other); Tony Tony Blurt Blurt Tony Tony return return 0; 0; }} other NH P MÔN L P TRÌNH 'T' 'o' ‘n’ 'y' 32 'B' 'l' 12/23/2009 'u' 'r' 't' 22 Chu i ký t – M t s hàm th vi n L y dài chu i l = strlen(s); strlen(s); i toàn b ký t c a chu i thành IN HOA strupr(s); i toàn b ký t c a chu i thành in th ng strlwr(s); NH P MÔN L P TRÌNH 12/23/2009 23 Chu i ký t – M t s hàm th vi n So sánh chu i: so sánh theo th t t Phân bi t IN HOA – in th i n ng: int strcmp(const char *s1, const char *s2); Không phân bi t IN HOA – in th ng: int stricmp(const char *s1, const char *s2); NH P MÔN L P TRÌNH 12/23/2009 24 Chu i ký t – ví d strcmp #include #include int int main() main() Minor Minor %s", %s", s1, s1, s2); s2); return 0; return 0; }} NH P MÔN L P TRÌNH 12/23/2009 25 Chu i ký t – M t s hàm th vi n Gán n i dung chu i: o Ché Chép toàn b chu i source sang chu i dest: int strcpy(char *dest, const char *src); o Chép t i a n ký t t source sang dest: int strncpy(char *dest, const char *src, int n); T o chu i m i t chu i ã có: char *strdup(const char *src); NH P MÔN L P TRÌNH 12/23/2009 26 Chu i ký t – ví d strcpy #include #include int int main() main() {{ char char s[] s[] == "Tony "Tony Blurt"; Blurt"; char s2[100], *s3; char s2[100], *s3; Tony Tony Blurt Blurt To123Blurt To123Blurt Blurt Blurt strcpy(s2, strcpy(s2, s); s); printf("%s\n", printf("%s\n", s2); s2); strncpy(s2 + 2, strncpy(s2 + 2, "12345", "12345", 3); 3); printf("%s\n", s2); printf("%s\n", s2); s3 s3 == strdup(s strdup(s ++ 5); 5); printf("%s\n", s3); printf("%s\n", s3); free(s3); free(s3); return return 0; 0; }} NH P MÔN L P TRÌNH 12/23/2009 27 Chu i ký t – M t s hàm th vi n N i chu i: char *strcat(char *dest, const char *src); Tách chu i: char *strtok(char *s, const char *sep); Tr v a ch c a o n u tiên Mu n tách o n k ti p tham s th nh t s NULL NH P MÔN L P TRÌNH 12/23/2009 28 Chu i ký t – ví d strtok #include #include #define #define SEPARATOR SEPARATOR "., "., "" int int main() main() {{ char char s[]= s[]= "Thu "Thu strtok: strtok: 9,123.45"; 9,123.45"; char *p; char *p; Thu Thu strtok: strtok: 99 123 123 45 45 pp == strtok(s, strtok(s, SEPARATOR); SEPARATOR); while (p != NULL) while (p != NULL) {{ printf("%s\n", printf("%s\n", p); p); pp == strtok(NULL, strtok(NULL, SEPARATOR); SEPARATOR); }} return return 0; 0; }} NH P MÔN L P TRÌNH 12/23/2009 29 Chu i ký t – M t s hàm th vi n Tìm m t ký t chu i: char *strchr(const char *s, int c); Tìm m t o n ký t chu i: char *strstr(const char *s1, const char *s2); NH P MÔN L P TRÌNH 12/23/2009 30 Chu i ký t – ví d tìm ki m #include #include int int main() main() {{ char char s[]= s[]= "Thu "Thu tim tim kiem kiem chuoi"; chuoi"; char *p; char *p; pp == strchr(s, strchr(s, 'm'); 'm'); printf("%s\n", printf("%s\n", p); p); pp == strstr(s, strstr(s, "em"); "em"); printf("%s\n", printf("%s\n", p); p); return 0; return 0; m mkiem kiemchuoi chuoi em emchuoi chuoi }} NH P MÔN L P TRÌNH 12/23/2009 31 Chu i ký t – chèn m t o n ký t #include #include void void StrIns(char StrIns(char *s, *s, char char *sub) *sub) {{ int int len len == strlen(sub); strlen(sub); memmove(s + memmove(s + len, len, s, s, strlen(s)+1); strlen(s)+1); strncpy(s, strncpy(s, sub, sub, len); len); }} 123 123Thu Thuchen chen int main() int main() 123 123Thu Thu45chen 45chen {{ char char s[]= s[]= "Thu "Thu chen"; chen"; StrIns(s, StrIns(s, "123"); "123"); StrIns(s + StrIns(s + 8, 8, "45"); "45"); return 0; return 0; printf("%s\n", printf("%s\n", s); s); printf("%s\n", p); printf("%s\n", p); }} NH P MÔN L P TRÌNH 12/23/2009 32 Chu i ký t – xóa m t o n ký t #include #include void void StrDel(char StrDel(char *s, *s, int int n) n) {{ memmove(s, memmove(s, ss ++ n, n, strlen(s+n)+1); strlen(s+n)+1); }} int xoa int main() main() xoa12345 12345 {{ xoa xoa45 45 char s[]= "Thu xoa 12345"; char s[]= "Thu xoa 12345"; StrDel(s, StrDel(s, 4); 4); StrDel(s + StrDel(s + 4, 4, 3); 3); return 0; return 0; printf("%s\n", printf("%s\n", printf("%s\n", printf("%s\n", s); s); p); p); }} NH P MÔN L P TRÌNH 12/23/2009 Tóm l 33 c Khai báo Nh p / xu t Con tr chu i ký t M t s hàm th vi n Chèn / lo i b m t o n NH P MÔN L P TRÌNH 12/23/2009 34 [...]... strupr(s); i toàn b các ký t c a chu i thành in th ng strlwr(s); NH P MÔN L P TRÌNH 12/23/2009 23 Chu i ký t – M t s hàm th vi n So sánh chu i: so sánh theo th t t Phân bi t IN HOA – in th i n ng: int strcmp(const char *s1, const char *s2); Không phân bi t IN HOA – in th ng: int stricmp(const char *s1, const char *s2); NH P MÔN L P TRÌNH 12/23/2009 24 Chu i ký t – ví d strcmp #include #include ... s2); s2); return 0; return 0; }} NH P MÔN L P TRÌNH 12/23/2009 25 Chu i ký t – M t s hàm th vi n Gán n i dung chu i: o Ché Chép toà toàn b chu i source sang chu i dest: int strcpy(char *dest, const char *src); o Chép t i a n ký t t source sang dest: int strncpy(char *dest, const char *src, int n); T o chu i m i t chu i ã có: char *strdup(const char *src); NH P MÔN L P TRÌNH 12/23/2009 26 Chu i ký t – ví... printf("%s\n", p); p); pp == strtok(NULL, strtok(NULL, SEPARATOR); SEPARATOR); }} return return 0; 0; }} NH P MÔN L P TRÌNH 12/23/2009 29 Chu i ký t – M t s hàm th vi n Tìm m t ký t trên chu i: char *strchr(const char *s, int c); Tìm m t o n ký t trên chu i: char *strstr(const char *s1, const char *s2); NH P MÔN L P TRÌNH 12/23/2009 30 Chu i ký t – ví d tìm ki m #include #include int int main()... printf("%s\n", s3); printf("%s\n", s3); free(s3); free(s3); return return 0; 0; }} NH P MÔN L P TRÌNH 12/23/2009 27 Chu i ký t – M t s hàm th vi n N i chu i: char *strcat(char *dest, const char *src); Tách chu i: char *strtok(char *s, const char *sep); Tr v a ch c a o n u tiên Mu n tách o n k ti p tham s th nh t s là NULL NH P MÔN L P TRÌNH 12/23/2009 28 Chu i ký t – ví d strtok #include #include ... StrDel(s + StrDel(s + 4, 4, 3); 3); return 0; return 0; printf("%s\n", printf("%s\n", printf("%s\n", printf("%s\n", s); s); p); p); }} NH P MÔN L P TRÌNH 12/23/2009 Tóm l 33 c Khai báo Nh p / xu t Con tr và chu i ký t M t s hàm th vi n Chèn / lo i b m t o n con NH P MÔN L P TRÌNH 12/23/2009 34 ... NH P MÔN L P TRÌNH 21 12/23/2009 u ý: k t thúc chu i #include #include int int main() main() {{ char char other[] other[] == "Tony "Tony Blurt"; Blurt"; "Blurt" s không c in ra printf("%s\n", printf("%s\n", other); other); other[4] other[4] == '\0'; '\0'; printf("%s\n", printf("%s\n", other); other); Tony Tony Blurt Blurt Tony Tony return return 0; 0; }} other NH P MÔN L P TRÌNH... chen"; chen"; StrIns(s, StrIns(s, "123"); "123"); StrIns(s + StrIns(s + 8, 8, "45"); "45"); return 0; return 0; printf("%s\n", printf("%s\n", s); s); printf("%s\n", p); printf("%s\n", p); }} NH P MÔN L P TRÌNH 12/23/2009 32 Chu i ký t – xóa m t o n ký t #include #include void void StrDel(char StrDel(char *s, *s, int int n) n) {{ memmove(s, memmove(s, ss ++ n, n, strlen(s+n)+1);... 'm'); 'm'); printf("%s\n", printf("%s\n", p); p); pp == strstr(s, strstr(s, "em"); "em"); printf("%s\n", printf("%s\n", p); p); return 0; return 0; m mkiem kiemchuoi chuoi em emchuoi chuoi }} NH P MÔN L P TRÌNH 12/23/2009 31 Chu i ký t – chèn m t o n ký t #include #include void void StrIns(char StrIns(char *s, *s, char char *sub) *sub) {{ int int len len == strlen(sub); strlen(sub); ... li u vùng nh heap Con tr ã c s d ng hàm scanf NH P MÔN L P TRÌNH 12/23/2009 Con tr – Khai báo C Ki u tr ph i c nh ngh a tr c int //PINT ki u tr - int PINT int NH P MÔN L P TRÌNH ã c ó typedef... ng NH P MÔN L P TRÌNH 12/23/2009 16 Chu i ký t - String Chu i ký t – Strings M t s qui t c Nh p / xu t Con tr chu i ký t M t s hàm th vi n NH P MÔN L P TRÌNH 12/23/2009 18 Chu i ký t - M t s... p[1], *p); *p); pp -= 2; -= 2; printf(“%i printf(“%i %i ”, %i ”, p[3], p[3], p[1]); p[1]); return return 0; 0; }} NH P MÔN L P TRÌNH 12/23/2009 22 33 11 11 22 11 99 33 14 Con tr - C p phát vùng

Ngày đăng: 03/01/2016, 10:24

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan