intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Nhập môn lập trình: Con trỏ, chuỗi - Trần Phước Tuấn

Chia sẻ: Năm Tháng Tĩnh Lặng | Ngày: | Loại File: PDF | Số trang:17

57
lượt xem
4
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

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

  1. 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
  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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
7=>1