Bài giảng Nhập môn lập trình: Con trỏ, chuỗi - Trần Phước Tuấn
lượt xem 4
download
Bài giảng này cung cấp cho người học một số nội dung liên quan đến con trỏ và chuỗi trong chương trình C như: Khai báo con trỏ và chuỗi trong C, cách nhập/xuất, con trỏ và chuỗi ký tự, một số hàm thư viện, chèn/bỏ một đoạn con. Mời các bạn cùng tham khảo để nắm bắt nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Nhập môn lập trình: Con trỏ, chuỗi - Trần Phước Tuấn
- 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 và m ng C p phát vùng nh ng NH P MÔN L P TRÌNH 12/23/2009 2
- Con tr – M t s lý do nên s d ng Con tr là ki u d li u l u tr a ch c a các vùng d li u trong b nh máy tính Ki u con tr cho phép: Truy n tham s ki u a ch Bi u di n các ki u, c u trúc d li u ng u tr d li u trong vùng nh heap Con tr ã c s d ng trong hàm scanf NH P MÔN L P TRÌNH 12/23/2009 3 Con tr – Khai báo trong C Ki u con tr ph i c nh ngh a trên m t ki u c s ã c nh ngh a tr c ó. typedef ki uc s *Tênki u; typedef int *PINT; //PINT là ki u con tr - a ch vùng nh ki u int int x; PINT p; //p, p1: bi n ki u int * int *p1; NH P MÔN L P TRÌNH 12/23/2009 4
- Con tr – Khai báo trong 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à và dd ki ki uu char char pc pc là là con con trtr nn char char */ */ double* double* pd, pd, e, e, f; f; /* /* pd pd là là con con tr tr nn double double ee and and ff are are double double */*/ char char *start, *start, *end; *end; NH P MÔN L P TRÌNH 12/23/2009 5 Con tr - Toán t “&” “&”: toán t l y a ch c a 1 bi n a ch c a t t c các bi n trong ch ng trình u ã c ch nh t khi khai báo char char gg == 'z'; 'z'; p c int int main() main() {{ 0x1132 'a' 0x1132 char char cc == 'a'; 'a'; char *p; char *p; p g pp == &c; &c; pp == &g; 0x91A2 'z' &g; 0x91A2 return return 0;0; }} NH P MÔN L P TRÌNH 12/23/2009 6
- Con tr - Toán t “*” “*”: toán t truy xu t giá tr c a vùng nh c qu n lý b i con tr . #include #include p c char g = 'z'; char g = 'z'; 0x1132 'a' int int main() main() aa 0x1132 {{ zz char char cc == 'a'; 'a'; p g char *p; char *p; 0x91A2 'z' pp == &c; &c; 0x91A2 printf("%c\n", printf("%c\n", *p); *p); pp == &g; &g; xu t giá tr do p ang printf("%c\n", printf("%c\n", *p); *p); qu n lý return return 0; 0; }} NH P MÔN L P TRÌNH 12/23/2009 7 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 8
- Con tr NULL Giá tr c bi t ch r ng con tr không qu n lý vùng nào. Giá tr này th ng c dùng ch m t con tr không h p l . #include #include int main() int main() {{ int int ii == 13; 13; short short *p == NULL; *p NULL; if (p == NULL) if (p == NULL) printf(“Con printf(“Con tr tr không không hh pp ll !\n"); !\n"); else else printf(“Giá printf(“Giá tr tr :: %hi\n", %hi\n", *p); *p); return return 0;0; }} NH P MÔN L P TRÌNH 12/23/2009 9 Con tr - Toán t gán “=” Có s khác bi t r t quan tr ng khi th c hi n các phép gán: p i int int ii == 10, 10, jj == 14; 14; int* 0x15A0 10 14 int* pp == &i; &i; 0x15A0 int *q = &j; int *q = &j; q j *p 0x15A4 14 *p == *q; *q; 0x15A4 và: int ii == 10, p 0x15A4 i int 10, jj == 14; 14; int int *p = &i; *p = &i; 0x15A0 10 int *q 0x15A0 int *q == &j; &j; q j pp == q; 0x15A4 14 q; 0x15A4 NH P MÔN L P TRÌNH 12/23/2009 10
- Luy n t p – i n vào ô tr ng int int main(void) main(void) i {{ 0x2100 int int ii == 10, 10, jj == 14, 14, k; k; int *p = int *p = &i;&i; j int int *q *q == &j; &j; 0x2104 k *p *p +=+= 1; 1; 0x1208 pp == &k; &k; *p *p = *q; = *q; p pp == q; q; 0x120B *p *p == *q; *q; q return 0x1210 return 0; 0; }} NH P MÔN L P TRÌNH 12/23/2009 11 Con tr và M ng Bi n ki u m ng là a ch t nh c a m t vùng nh , c xác nh khi khai báo, không thay i trong su t chu k s ng. Bi n con tr là a ch ng c a m t vùng nh , c xác nh qua phép gán a ch khi 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, 0}; 0}; 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 %i\n“, %i\n“, ); ); a, a, a[0], p, *p); a[0], p, *p); return 0; return 0; }} NH P MÔN L P TRÌNH 12/23/2009 12
- Con tr - Toán t “+” v i s nguyên 0x15A0 #include a #include int main() int main() 1 {{ 4 3 short short a[10] a[10] == {1, {1, 3, 3, 5, 5, 2, 2, 0}; 0}; short *p = a; 5 short *p = a; printf(“0x%04X printf(“0x%04X %i %i 0x%04X 0x%04X %i\n“, %i\n“, ); ); 2 a, a[0], p, *p); a, a[0], p, *p); 0 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) ++; 0x16B2 printf(“0x%04X p printf(“0x%04X %i %i 0x%04X 0x%04X %i\n“, %i\n“, ); ); a, a[0], p, *p); a, a[0], p, *p); 0x15A0 0x15A2 return 0; return 0; }} NH P MÔN L P TRÌNH 12/23/2009 13 Con tr - Luy n t p #include #include int main() int main() 22 22 {{ 33 11 int int a[10] a[10] == {2, {2, 3, 3, 5, 5, 1, 1, 4, 4, 7, 7, 0}; 0}; 11 99 int *p = int *p = a;a; 11 33 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] = ++; a[2] = 9; 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 14
- Con tr - C p phát vùng nh ng Có th ch nh vùng m i cho 1 con tr qu n lý b ng các l nh hàm malloc, calloc ho c toán t new c a C++ Vùng nh do 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 12/23/2009 15 Tóm l c Khai báo Các toá toán t “&”, “*”, “=”, “+” Nh c l i v truy n tham s a ch Con tr và 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 và 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 là m ng m t chi u có m i thành ph n là m t s nguyên c k t thúc b i s 0. Ký t k t thúc (0) cu i chu i ký t th ng c g i là ký t null (không gi ng con tr NULL). Có th ghi là 0 ho c ‘\0’ (không ph i ch o). c khai bá báo và và truy n tham s nh m ng m t chi u. char char s[100]; s[100]; unsigned unsigned char char s1[1000]; s1[1000]; NH P MÔN L P TRÌNH 12/23/2009 19 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' 0 last_name 'M' 'i' 'n' 'o' 'r' 0 other 'T' 'o' ‘n’ 'y' 32 'B' 'l' 'u' 'r' 't' 0 characters 'N' 'o' 32 'n' 'u' 'l' 'l' 0 NH P MÔN L P TRÌNH 12/23/2009 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 các hàm scanf và 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 12/23/2009 21 u ý: k t thúc chu i #include #include int int main() main() {{ "Blurt" s không char char other[] other[] == "Tony "Tony Blurt"; Blurt"; c in ra printf("%s\n", printf("%s\n", other); other); other[4] other[4] == '\0'; '\0'; printf("%s\n", Tony Tony Blurt Blurt printf("%s\n", other); other); Tony Tony return return 0; 0; }} other 'T' 'o' ‘n’ 'y' 32 'B' 'l' 'u' 'r' 't' 0 NH P MÔN L P TRÌNH 12/23/2009 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 các ký t c a chu i thành IN HOA 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 i n Phân bi t IN HOA – in th 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à 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() {{ Tony Tony Blurt Blurt char char s[] s[] == "Tony "Tony Blurt"; Blurt"; To123Blurt To123Blurt char s2[100], *s3; char s2[100], *s3; Blurt Blurt strcpy(s2, strcpy(s2, s); s); printf("%s\n", printf("%s\n", s2);s2); strncpy(s2 strncpy(s2 + 2, "12345", + 2, "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 là NULL NH P MÔN L P TRÌNH 12/23/2009 28
- Chu i ký t – ví d strtok #include #include Thu Thu #define #define SEPARATOR SEPARATOR "., "., "" strtok: strtok: int 99 int main() main() {{ 123 123 char char s[]= s[]= "Thu "Thu strtok: strtok: 9,123.45"; 9,123.45"; 45 45 char *p; char *p; pp == strtok(s, strtok(s, SEPARATOR); SEPARATOR); while while (p != NULL) {{ (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 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() 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"); mmkiem kiemchuoi chuoi printf("%s\n", printf("%s\n", p);p); return 0; em emchuoi chuoi return 0; }} 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"); printf("%s\n", printf("%s\n", s); s); StrIns(s StrIns(s + 8, + 8, "45"); "45"); printf("%s\n", p); printf("%s\n", p); return 0; return 0; }} 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 int main() main() xoa xoa12345 12345 {{ xoa xoa45 45 char s[]= "Thu xoa 12345"; char s[]= "Thu xoa 12345"; StrDel(s, StrDel(s, 4); 4); printf("%s\n", printf("%s\n", s); s); StrDel(s StrDel(s + 4, + 4, 3); 3); printf("%s\n", printf("%s\n", p); p); return 0; return 0; }} NH P MÔN L P TRÌNH 12/23/2009 33 Tóm l 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
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Nhập môn lập trình C: Chương 2 - Trần Thị Kim Chi
24 p | 148 | 16
-
Bài giảng Nhập môn lập trình - Chương 1: Các khái niệm cơ bản về lập trình
20 p | 113 | 8
-
Bài giảng Nhập môn lập trình: Chương 2 - Trần Minh Thái
86 p | 106 | 8
-
Bài giảng Nhập môn lập trình: Chương 1 - Trần Minh Thái
58 p | 102 | 7
-
Bài giảng Nhập môn lập trình: Bài 1 - Trần Duy Thanh
70 p | 188 | 5
-
Bài giảng Nhập môn lập trình: Bài 1 - TS. Ngô Hữu Dũng
47 p | 79 | 3
-
Bài giảng Nhập môn lập trình: Tổng quan về ngôn ngữ lập trình C - Nguyễn Đình Hưng
14 p | 102 | 3
-
Bài giảng Nhập môn lập trình: Tổng quan về lập trình - Nguyễn Đình Hưng
21 p | 77 | 3
-
Bài giảng Nhập môn lập trình: Chương giới thiệu - ThS. Nguyễn Đông Hà
9 p | 77 | 3
-
Bài giảng Nhập môn lập trình: Bài 3 - Trần Duy Thanh
16 p | 94 | 3
-
Bài giảng Nhập môn lập trình: Giới thiệu về các cấu trúc điều khiển - Trường ĐH Khoa học tự nhiên TP. HCM
58 p | 1 | 1
-
Bài giảng Nhập môn lập trình: Sử dụng những kiểu dữ liệu cơ sở trong chương trình - Trường ĐH Khoa học tự nhiên TP. HCM
53 p | 0 | 0
-
Bài giảng Nhập môn lập trình: Giới thiệu tổng quan về lập trình - Trường ĐH Khoa học tự nhiên TP. HCM
31 p | 0 | 0
-
Bài giảng Nhập môn lập trình: Hàm và kỹ thuật tổ chức chương trình - Trường ĐH Khoa học tự nhiên TP. HCM
86 p | 1 | 0
-
Bài giảng Nhập môn lập trình: Giới thiệu về thuật toán - Trường ĐH Khoa học tự nhiên TP. HCM
29 p | 0 | 0
-
Bài giảng Nhập môn lập trình: Kỹ thuật cài đặt các thuật toán cơ bản - Trường ĐH Khoa học tự nhiên TP. HCM
37 p | 0 | 0
-
Bài giảng Nhập môn lập trình: Dữ liệu mạng và dữ liệu có cấu trúc - Trường ĐH Khoa học tự nhiên TP. HCM
37 p | 0 | 0
-
Bài giảng Nhập môn lập trình: Lập trình với tập tin văn bản thô - Trường ĐH Khoa học tự nhiên TP. HCM
38 p | 0 | 0
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn