Cơ sở dữ liệu - Con trỏ, chuỗi
Bạn đang xem tài liệu "Cơ sở dữ liệu - Con trỏ, chuỗi", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- co_so_du_lieu_con_tro_chuoi.pdf
Nội dung text: Cơ sở dữ liệu - Con trỏ, chuỗi
- NMLTNMLT CONCON TRTRӒӒ,, CHUCHUӚӚII Trҫn Phѭӟc Tuҩn tranphuoctuan.khoatoan.dhsp@gmail.com ConCon trtrӓӓ –– PointerPointer Khai báo Các 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
- ConCon trtrӓӓ –– Mӝtt ssӕ lý do nên sӱ dөөngng 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 ConCon trtrӓӓ –– 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
- ConCon trtrӓӓ –– KhaiKhai bbááoo trongtrong CC intint *pi;*pi; longlong int int *p; *p; float*float* pf;pf; charchar c,c, d,d, *pc;*pc; /* /* cc vàdvàdkikiӅӅuu charchar pcpc làlà con con trtrӑӑ ÿÿӁӁnn char char */*/ double*double* pd, pd, e,e, f;f; /*/* pdpd làlà con con trtrӑӑ ÿÿӁӁnn double double ee andand ff areare doubledouble */*/ charchar *start,*start, *end;*end; NHҰP MÔN LҰP TRÌNH 12/23/2009 5 ConCon trtrӓӓ Toáán tӱ “&&”” “&”: toán tӱ lҩy ÿӏa chӍ cӫa 1 biӃn Ĉ͓a ch͑ cͯa ṱt c̫ các bi͇n trong ch˱˯ng trình ÿ͉u ÿã ÿ˱ͫc ch͑ ÿ͓nh tͳ khi khai báo charchar g g == 'z';'z'; p c intint main() main() { 0x1132 'a' { 0x1132 charchar c c == 'a';'a'; charchar *p; *p; p g p = &c; p = &c; 0x91A2 'z' pp == &g;&g; 0x91A2 returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 6
- ConCon trtrӓӓ 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' intint main() main() a 0x1132 { a { zz charchar c c == 'a';'a'; p g charchar *p; *p; 0x91A2 'z' pp == &c;&c; 0x91A2 printf("%c\n",printf("%c\n", *p);*p); xuҩt giá trӏ do p ÿang pp == &g;&g; quҧn lý printf("%c\n",printf("%c\n", *p);*p); returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 7 ConCon trtrӓӓ TruyӅӅn tham sӕ ÿӏa chӍ #include#include voidvoid change(int change(int *v); *v); intint main() main() {{ intint varvar = = 5;5; change(&var);change(&var); printf("main:printf("main: var var = = %i\n",%i\n", var); var); returnreturn 0;0; }} voidvoid change(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
- ConCon trtrӓӓ NULLNULL 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 intint main() main() {{ intint ii == 13;13; shortshort *p *p == NULL;NULL; ifif (p(p === NULL)NULL) printf(“Conprintf(“Con trtrӑӑ khôngkhông hhӥӥpp llӉӉ!\n");!\n"); elseelse printf(“Giáprintf(“Giá tr trӍӍ :: %hi\n", %hi\n", *p);*p); returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 9 ConCon trtrӓӓ Toáán tӱ gánn “=” 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 i = 10, j = 14; int i = 10, j = 14; 10 14 int* p = &i; 0x15A0 int* p = &i; 0x15A0 intint *q *q == &j;&j; q j 14 *p = *q; 0x15A4 *p = *q; 0x15A4 và: p 0x15A4 i intint i i == 10,10, jj == 14;14; int *p = &i; 0x15A0 10 int *p = &i; 0x15A0 intint *q *q == &j;&j; q j 14 p = q; 0x15A4 p = q; 0x15A4 NHҰP MÔN LҰP TRÌNH 12/23/2009 10
- LuyLuyӋӋnn ttұұpp –– ĈĈiiӅn vàoo ôô trtrӕngng intint main(void) main(void) i {{ 0x2100 intint i i == 10,10, jj == 14,14, k;k; intint *p *p == &i;&i; j intint *q *q == &j;&j; 0x2104 k *p += 1; *p += 1; 0x1208 pp == &k;&k; *p*p == *q;*q; p pp == q;q; 0x120B *p = *q; *p = *q; q 0x1210 returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 11 ConCon trtrӓӓ vvàà MMҧҧngng 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 intint main() main() {{ intint a[10]a[10] == {1,{1, 3,3, 4,4, 2,2, 0};0}; intint *p; *p; p=p=a;a; //a//a == p:p: saisai printf(“0x%04Xprintf(“0x%04X %i%i 0x%04X0x%04X %i\n“,%i\n“, );); a,a, a[0],a[0], p,p, *p);*p); returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 12
- ConCon trtrӓӓ Toáán tӱ “++” vӟi sӕ nguyên 0x15A0 a #include#include intint main() main() 1 {{ 43 short a[10] = {1, 3, 5, 2, 0}; short a[10] = {1, 3, 5, 2, 0}; 5 shortshort *p *p == a;a; 2 printf(“0x%04Xprintf(“0x%04X %i%i 0x%04X0x%04X %i\n“,%i\n“, );); 2 a,a, a[0],a[0], p,p, *p);*p); 0 p ++; p ++; printf(“0x%04Xprintf(“0x%04X %i%i 0x%04X0x%04X %i\n“,%i\n“, );); a,a, a[0],a[0], p,p, *p);*p); (*p) ++; 0x16B2 (*p) ++; p printf(“0x%04Xprintf(“0x%04X %i%i 0x%04X0x%04X %i\n“,%i\n“, );); 0x15A00x15A2 a,a, a[0],a[0], p,p, *p);*p); 0x15A2 returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 13 ConCon trtrӓӓ LuyӋn tұpp #include#include intint main() main() 22 22 {{ 33 11 intint a[10]a[10] == {2,{2, 3,3, 5,5, 1,1, 4,4, 7,7, 0};0}; 11 99 intint *p *p == a;a; 11 33 printf(“%iprintf(“%i %i\n“,%i\n“, a[0],a[0], *p);*p); pp ++;++; printf(“%iprintf(“%i %i\n“,%i\n“, *p,*p, p[2]);p[2]); pp ++;++; a[2] a[2] == 9;9; printf(“%iprintf(“%i %i\n“,%i\n“, p[1],p[1], *p);*p); pp -=-= 2;2; printf(“%iprintf(“%i %i\n”,%i\n”, p[3],p[3], p[1]);p[1]); returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 14
- ConCon trtrӓӓ Cҩpp phpháát vùng nhӟ ÿӝngng 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 intint main() main() {{ intint *p=*p=newnew int[10];int[10]; p[0]p[0] == 1;1; p[3]p[3] == -7;-7; deletedelete []p;[]p; returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 15 TTóómm llѭѭӧӧcc Khai báo Các 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
- ChuChuӛӛii kýký ttӵӵ StringString ChuChuӛӛii kýký ttӵӵ –– StringsStrings 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
- ChuChuӛӛii kýký ttӵӵ MMӝӝtt ssӕ 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áo và truyӅn tham sӕ nhѭ mҧng mӝt chiӅu. charchar s[100];s[100]; unsignedunsigned charchar s1[1000]; s1[1000]; NHҰP MÔN LҰP TRÌNH 12/23/2009 19 ChuChuӛӛii kýký ttӵӵ VVíí dө charchar first_name[5] first_name[5] == {{ 'J','J', 'o','o', 'h','h', 'n','n', '\0''\0' };}; charchar last_name[6] last_name[6] == "Minor";"Minor"; charchar other[] other[] == "Tony"Tony Blurt";Blurt"; charchar 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
- ChuChuӛӛii kýký ttӵӵ NhNhұұ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ӫa s Hoһc sӱ dөng các hàm scanf và printf vӟi ký tӵ ÿӏnh dҥng “%s” charchar 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 charchar name[100]; name[100]; printf("Nhapprintf("Nhap motmot chuoichuoi kyky tutu %s:%s: ");"); gets(name);gets(name); NHҰP MÔN LҰP TRÌNH 12/23/2009 21 /ѭ/ѭuu ýý:: kkӃӃtt ththúúcc chuchuӛӛii #include#include intint main() main() {{ "Blurt" sӁ không charchar other[] other[] == "Tony"Tony Blurt";Blurt"; ÿѭӧc in ra printf("%s\n",printf("%s\n", other);other); other[4]other[4] == '\0';'\0'; Tony Blurt printf("%s\n",printf("%s\n", other);other); Tony Blurt TonyTony returnreturn 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
- ChuChuӛӛii kýký ttӵӵ –– Mӝt sӕӕ hàm thѭ viӋn Lҩy ÿӝ dài chuӛi l = 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 ChuChuӛӛii kýký ttӵӵ –– 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
- ChuChuӛӛii kýký ttӵӵ –– ví ddө strcmp #include#include intint main() main() MinorMinor > %s",%s", s1,s1, s2);s2); returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 25 ChuChuӛӛii kýký ttӵӵ –– Mӝt sӕӕ hàm thѭ viӋn Gán nӝi dung chuӛi: o 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
- ChuChuӛӛii kýký ttӵӵ –– ví ddө strcpy #include#include intint main() main() Tony Blurt {{ Tony Blurt charchar s[] s[] == "Tony"Tony Blurt";Blurt"; To123BlurtTo123Blurt charchar s2[100],s2[100], *s3;*s3; BlurtBlurt strcpy(s2,strcpy(s2, s);s); printf("%s\n",printf("%s\n", s2);s2); strncpy(s2strncpy(s2 ++ 2,2, "12345","12345", 3);3); printf("%s\n",printf("%s\n", s2);s2); s3s3 == strdup(sstrdup(s ++ 5);5); printf("%s\n",printf("%s\n", s3);s3); free(s3);free(s3); returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 27 ChuChuӛӛii kýký ttӵӵ –– 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
- ChuChuӛӛii kýký ttӵӵ –– ví ddө strtok #include#include ThuThu #define#define SEPARATORSEPARATOR ".,"., "" strtok:strtok: 9 intint main() main() 9 {{ 123123 charchar s[]= s[]= "Thu"Thu strtok:strtok: 9,123.45";9,123.45"; 4545 charchar *p;*p; pp == strtok(s,strtok(s, SEPARATOR);SEPARATOR); whilewhile (p(p !=!= NULL)NULL) {{ printf("%s\n",printf("%s\n", p);p); pp == strtok(NULL,strtok(NULL, SEPARATOR);SEPARATOR); }} returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 29 ChuChuӛӛii kýký ttӵӵ –– 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
- ChuChuӛӛii kýký ttӵӵ –– ví ddө tìm kiӃmm #include#include intint main() main() {{ charchar s[]= s[]= "Thu"Thu timtim kiemkiem chuoi";chuoi"; charchar *p;*p; pp == strchr(s,strchr(s, 'm');'m'); printf("%s\n",printf("%s\n", p);p); p = strstr(s, "em"); p = strstr(s, "em"); mm kiem kiem chuoi chuoi printf("%s\n",printf("%s\n", p);p); emem chuoi chuoi returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 31 ChuChuӛӛii kýký ttӵӵ –– chènn mmӝtt ÿÿooҥҥn ký tӵ #include#include voidvoid StrIns(charStrIns(char *s,*s, charchar *sub)*sub) {{ intint lenlen == strlen(sub);strlen(sub); memmove(smemmove(s ++ len,len, s,s, strlen(s)+1);strlen(s)+1); strncpy(s,strncpy(s, sub,sub, len);len); } } 123123 Thu Thu chen chen intint main() main() 123123 Thu Thu 45chen 45chen {{ charchar s[]= s[]= "Thu"Thu chen";chen"; StrIns(s,StrIns(s, "123");"123"); printf("%s\n",printf("%s\n", s);s); StrIns(sStrIns(s ++ 8,8, "45");"45"); printf("%s\n",printf("%s\n", p);p); returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 32
- ChuChuӛӛii kýký ttӵӵ –– xóa mӝӝt ÿoҥnn kýký ttӵӵ #include#include voidvoid StrDel(charStrDel(char *s,*s, intint n)n) {{ memmove(s,memmove(s, ss ++ n,n, strlen(s+n)+1);strlen(s+n)+1); }} intint main() main() xoaxoa 12345 12345 { { xoaxoa 45 45 charchar s[]= s[]= "Thu"Thu xoaxoa 12345";12345"; StrDel(s,StrDel(s, 4);4); printf("%s\n",printf("%s\n", s);s); StrDel(sStrDel(s ++ 4,4, 3);3); printf("%s\n",printf("%s\n", p);p); returnreturn 0;0; }} NHҰP MÔN LҰP TRÌNH 12/23/2009 33 TTóómm llѭѭӧӧcc 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