Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
258,2 KB
Nội dung
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