Cơ sở dữ liệu - Con trỏ, chuỗi

pdf 17 trang vanle 2570
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:

  • pdfco_so_du_lieu_con_tro_chuoi.pdf

Nội dung text: Cơ sở dữ liệu - Con trỏ, chuỗi

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