You are on page 1of 7

1.1 Con tr: 1.1.1 Con tr l g? - Hi: Con tr l g? C n c khng?

- p: Con tr (pointer) l mt kiu d liu c bit dng biu din cc a ch. Ni cch khc, con tr khng n c Con tr c dng tham kho ti mt nh, ngha l con tr khng tht s cha d liu m ta mun thao tc, n ging nh shortcut (ng tt) trong Windows vy. 1.1.2 Con tr lm g? - Hi: Con tr lm g? - p: Th dng ...cha a ch cc bin. a xu thi, con tr c rt nhiu ng dng to ln, nh c con tr ta c th thao tc ti nhng nh v danh (khng c gn vo bin no), ngoi ra con tr cn phc v cho vic cp pht ng, ci t linked list,... 1.1.3 c im ca con tr - Hi: Bn gii thch CLGT, ch hiu g ht, lm n ni r hn i. - p: Mt vi c im ca con tr: + Con tr cha a ch: Ngha l mt con tr bt k lun cha mt con s, s ny chnh l a ch ca 1 nh no . Ty vo kin trc my tnh ta ang s dng m kch thc con tr c th l 8bit, 16bit, 32bit hay thm ch 64bit (Trc gi ta ang s dng con tr 32bit). Ni cch khc, trn mt h thng MI CON TR U C KCH THC NH NHAU, d l con tr *char, *int, struct *xyz, .... + Kch thc u m ra? Nh ni trn, con tr lu 1 a ch nh, mi trng lp trnh ca bn l 32bit, iu c ngha l 1 nh c a ch di 32bit (mi bit = 0/1), ngha l a ch nh nht ca 1 nh l 0000.0000.0000.0000.0000.0000.0000.0000 (hay 0x00000000) v ln nht l 1111.1111.1111.1111.1111.1111.1111.1111 (hay 0xffffffff). V din nhin 1 bin con tr cha c 1 s trong min t 0->(2^32-1) th n cn c 32bit = 4byte. + Mi nh = 1byte c 1 a ch, vy mt bin kiu int phi c 4 a ch ch? Quy c l bin kiu int ny s c a ch trng vi nh u tin ca n. VD: mt bin int chim 4 nh : 1000,1001,1010,1011 th ta ni bin ny c a ch l 1000.

1.1.4 Ton t ly a ch v Ton t truy cp 1.1.4.1. Ton t ly a ch &: Xt vd:

ex 1.1.4.1.a -------------------------int *p; int a; a = 5; p = &a; printf("%d", (int) p); a = 10; p = &a; printf("%d", (int) p); -------------------------Trong on m trn, &a (c l a ch ca a) tr v a ch nh cha bin a (chnh xc l nh u tin trong 4 nh cha bin kiu int a). Gi s a c lu trong nh 1000, th d a c nhn gi tr bao nhiu i na, a ch ca a cng khng thay i. 1.1.4.2. Ton t ly truy cp *: Tip tc vd trn, 2 on code sau c ngha tng ng nhau: ex 1.1.4.2.b --------------a = 100; --------------ex 1.1.4.2.c --------------*p = 100; ---------------

Trong vd (c), ta hiu rng *p = 100; ngha l gn s 100 vo nh c a ch l p. 1.1.5 ng dng ca con tr 1.1.5.1. Cp pht ng: Xt 2 on code sau: ex 1.1.5.1.a ------------------------int N = 100; int a[N]; ------------------------ex 1.1.5.1.b --------------------------------------int b[100]; ----------------------------------------

Bn c thy im khc nhau ca hai on code trn? Nu khng thy th xin chc mng bn, bn khng ngi nhm lp trong bui hc ngy hm nay :|

on code (a) l sai v kch thc ca mt mng l hng s, khi khai bo ta phi dng hng s khai bo, khng c s dng bin. C th trong mt s TH th n vn chy c nhng mng a s khng c ng 100 phn t. Vy vn t ra l phi lm sao to c 1 mng "ng", ngha l KCH THC MNG c quyt nh TI THI IM KHI TO MNG LC CHY CHNG TRNH. Cu tr li chnh l cp pht ng thng qua con tr. code C: ex 1.1.5.1.c int a* = (int*) malloc(N * sizeof(int)); code C++: ex 1.1.5.1.d int a* = new int[100]; Lu : - Vic p kiu (casting) con tr v int* vd (c) l khng bt buc nhng bn khng nn b qua n. - Mnh s ni thm v 2 hm malloc() v sizeof() nhng phn khc trnh long. Sau khi cp pht nh vd (c), h thng s tm mt dy cc nh lin tip nhau cp pht, v tr li a ch ny ca bin u tin trong dy N bin cho con tr a (N bin tc l 4*N nh, v sizeof(int) = 4). Nh vy nh th 0 c a ch l a, s nh th 1 c a ch l (a + 4), nh th k c a ch (a + 4*k). V cho d dng, C/C++ cho php ta truy xut nhanh bin th k thng qua tn a[k], ngoi ra C/C++ cng cung cp phng thc cng con tr vi 1 s, ngha l khi vit a + k s tng ng vi a ch ca nh th k, tc l:

int a*

th a + k l a + 4*k // sizeof(int) = 4 // sizeof(char)=1

char c* th c + k l c + k Ni cch khc a[k] = *(a+k).

1.1.5.2. Truyn tham s hm: 1.1.5.2.1 Con tr mng Trong C/C++ r rng mt con tr c th dng nh mt mng ( ni phn cp pht ng). iu ngc li cng ng, ngha l mt mng cng l mt con tr (nhn theo mt kha cnh no ). Do

khi truyn mt mng vo thnh tham s ca mt hm, ta truyn con tr mng vo. Mnh tm gi n l Con tr mng v n rt ging con tr. Mng cng c a ch, a ch ca mng chnh l a ch ca phn t u tin ca mng, ngha l khi ta khai bo: ----------int a[10]; ----------Th a c th dng nh l 1 con tr (trong 1 s trng hp), v a = &a[0]. 1.1.5.2.2 Nhc li v tham bin v tham tr: V ni dung ca topic ny qu di, mnh s khng nhc li phn ny, tuy nhin mnh c c mt bi vit sau kh hay v cc vn lin quan ti tham s hnh thc, tham s thc, tham tr v so snh chng gia 3 ngn ng C/C++/C#. Cc bn xem ti link sau: http://caydotnet.nightforum.net/t28-topic Lu : C++ c truyn tham bin qua php ton ly a ch &. Tuy nhin C khng p dng c cch , i vi C, mi tham s U L THAM TR, nn ta phi truyn con tr v con tr ny ko thay i khi kt thc hm, tuy nhin nh m con tr tr ti b thay i. Khng phi ngu nhin m ngi ta phi dng con tr ca con tr, thm ch 3, 4 ln con tr, tt c bt ngun t nguyn nhn trn. 1.1.5.3. Ci t Linked List: So vi mng tnh, mng ng pht ng c u th trong vic la chn lng b nh cn cp pht khi khi to mng. Tuy nhin trong thc t, nhiu trng hp khi khi to mng ta vn cha xc nh c chnh xc s phn t ca mng, thm ch ti khi kt thc chng trnh ta mi xc nh c. Vy nhu cu t ra l phi c cch no xin cp pht tng phn t mt khi cn dng ti, nu c th cho php thu hi chng khi khng dng na. V Linked List ra i p ng c kht khao da nu . Linked List thc cht l cc node ni vi sau thng qua 1 si dy lin kt l con tr next.

1.1.5.3.1 Node: Node l mt kiu d liu c bit, bn thn n tham chiu ti i tng Node khc. y l mt vd v i tng quy. Node c ci t bng struct (record). Cu trc mt Node thng thng: struct Node { datatype Data; } 1.1.5.3.2 Linked List: Linked List l mt danh sch cc Node, ni vi nhau thng qua cc reference, thng th chng lin kt tuyn tnh (mt phn t lun c phn t lin trc v lin sau, ring pt u ko c lin trc, ring pt cui ko c lin sau). V chng lin kt vi nhau nn ta ch cn "tm u" phn t u tin (nh vo con tr pHead) l c th duyt qua tt c cc pt ca Linked List. S kt thc ca Linked List thng c nh du bng vic con tr reference tr ti 1 gi tr c bit ngm nh sn (thng l NULL) hoc Node hin ti trng vi Node m con tr pTail tr ti. Linked List khng ch cho ta li th v vic ch ng cp pht ti nguyn b nh m cn gip tng tc trong mt s trng hp so vi dng mng (vd nh xa mt phn t cui danh sch). 1.2 struct: 1.2.1 Nhc li v struct Trong thc t th mi i tng c rt nhiu thuc tnh. VD nh con ngi c mu mt, mu tc, chiu cao, cn nng, tui, gii tnh,... Cc kiu d liu trc y khng th no din t c nhiu thuc tnh nh vy cho cng mt i tng. struct ra i nh mt gii php cu cnh cho vn nan gii ny. struct l mt kiu d liu c cu trc. N m t c nhiu thuc tnh ca mt i tng. => cha d liu tht s struct Node* reference; => tham kho ti mt Node khc, c th c nhiu tham kho

vd:

struct people { char name[30]; int birthyear; char eyecolor[10]; int height; //cm } nguoi1;

Ta truy xut cc thuc tnh ca mt struct thng qua ton t "." (khng c nhy kp). vd: nguoi1.age = 10; 1.2.2 struct v con tr Xt vd: struct people* pNguoi; pNguoi = (struct people*) malloc(sizeof(struct people)); (*pNguoi).age = 10; vd trn, ta cp pht ng 1 i tng kiu struct people, gn age ca i tng ny bng 10. pNguoi l mt con tr, n c kch thc ng bng 32bit (gi s ta s dng h thng 32bit), n khng h v KHNG KCH THC lu tr tt c thng s ca mt i tng people. Ta ch dng n truy cp ti 1 i tng people v danh m thi. Do cn c ton t truy cp "*". Tuy nhin cch vit: (*pNguoi).age = 10; kh rm r, gy bt tin. Do ngi ta ngh ra mt cch vit khc thun tin hn, l: pNguoi->age = 10; C ngha l : pNguoi->age tng ng vi: (*pNguoi).age

1.3 Ci t Linked List trong C: Cc bn tham kho bi vit sau:

http://www.daniweb.com/software-development/c/threads/216353/singly-linked-list-implementation Lu : - link: tng ng vi con tr next ta hay dng. void append(struct node **,int); Thm s nguyn vo cui danh sch void in_begin(struct node **,int); 1.4 Biu din Linked List: Thm s nguyn vo u s danh sch

Ch thch: - Mi mu cam l mt bin n, c kch thc bng 4 byte (int v con tr cng kch thc). - Mt Node = 1 struct : gm 2 nh lin tip nhau, nn c a ch hn km nhau 4 - S bn trong hcn l gi tr bin lu. - S bn gc trn-tri ca mi hcn l a ch lun l ca n. Nh vy Linked List trn biu din mt danh sch gm 3 Node, cha 3 s nguyn lin tip 1,2,3. Ba Node ny khng nm gn nhau trong b nh c h thng chn v cp pht. pHead = 1000, pTail = 1800

Source: https://elearning.cse.hcmut.edu.vn Written by Mrbammo. Last edited: 05/24/2012 07:23:48 PM

You might also like