1. Trang chủ
  2. » Công Nghệ Thông Tin

kỹ thuật lập trình C chuyên nghiệp phần 4 ppsx

24 286 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 24
Dung lượng 523 KB

Nội dung

CtỏCtỏ PitPit C on t r ỏ C on t r ỏ –– P o i n t er P o i n t er  KhaiKhai báobáo CáCá tátá tửtử ““ ”” ““ ** ”” “”“” “+”“+”  Cá c Cá c t o á n t o á n tửtử ““ && ” , ” , ““ ** ” , ” , “ = ” , “ = ” , “+”“+”  NhắcNhắclạilạivềvề truyềntruyền thamtham sốsốđịađịachỉchỉ  ConCon trỏtrỏ vàvà mảngmảng  CấCấ háthát ùù hớhớ độđộ  Cấ p Cấ p phátphát v ù ngv ù ng n hớ n hớ độ ng độ ng CtỏCtỏ Mộ ố lý d ê ử dMộ ố lý d ê ử d C on t r ỏ C on t r ỏ –– Mộ t s ố lý d o n ê n s ử d ụng Mộ t s ố lý d o n ê n s ử d ụng  ConCon trỏtrỏ làlà kiểukiểudữdữ liệuliệulưulưutrữtrữđịađịachỉchỉ củacủa cáccác vùngvùng dữdữ liệuliệu trongtrong bộbộ nhớnhớ máymáy tínhtính ểể  Ki ể uKi ể uconcon trỏtrỏ chocho p hép p hép::  TruyềnTruyền thamtham sốsố kiểukiểu địađịachỉchỉ ểể ễễ ểể ấấ  Bi ể uBi ể udi ễ ndi ễ n cáccác ki ể u,ki ể u, c ấ uc ấ utrúctrúc d ữ d ữ liệuliệu độngđộng  LưuLưutrữtrữ dữdữ liệuliệu trongtrong vùngvùng nhớnhớ heapheap  ConCon trỏtrỏđãđã đượcđượcs ử s ử dụngdụng trongtrong hàmhàm scanfscanf CtỏCtỏ Kh i bá CKh i bá C C on t r ỏ C on t r ỏ –– Kh a i bá o trong CKh a i bá o trong C KiểKiể t ỏt ỏ hảihải đđ đị hđị h hĩhĩ têtê ộtột kiểkiể ởở đãđã Kiể u Kiể uconcon t r ỏt r ỏ phảiphải đ ược đ ược đị n hđị n h ng hĩ ang hĩ a t r ê n t r ê nm ột m ột kiể u kiể ucơcơ s ở s ở đãđã đượcđược địnhđịnh nghĩanghĩatrướctrước đóđó typedeftypedef kiểucơsởkiểucơsở ** TênkiểuTênkiểu ;; typedeftypedef kiểucơsởkiểucơsở ** TênkiểuTênkiểu ;; typedeftypedef intint **PINT;PINT; ////PINTPINT là kiểu con trỏ là kiểu con trỏ địa chỉ vùng nhớ kiểu intđịa chỉ vùng nhớ kiểu int intint x;x; PINTPINT // 1 biế kiể// 1 biế kiể it*it* PINTPINT p;p; // p, p 1 : biế n kiể u // p, p 1 : biế n kiể u i n t *i n t * intint *p1;*p1; CtỏCtỏ Kh i bá t CKh i bá t C C on t r ỏ C on t r ỏ –– Kh a i bá o t rong CKh a i bá o t rong C int *pi; long int *p; long int *p; float* pf; char c, d, *pc; /* c và d kiểu char pc là con trỏ đến char */ double* pd, e, f; /* pd là con trỏ đến double e and f are double */ char *start, *end; CtỏCtỏ Tá ử “Tá ử “ ”” C on t r ỏ C on t r ỏ T o á n t ử “T o á n t ử “ && ””  ““ && ”” :: toántoán tửtử lấylấy địađịa chỉchỉ củacủa 11 biếnbiến  && :: toántoán tửtử lấylấy địađịa chỉchỉ củacủa 11 biếnbiến  ĐịaĐịachỉchỉ củacủatấttấtcảcả cáccác biếnbiếntrongtrong chươngchương trìnhtrình đềuđều đãđã đượcđược chỉchỉ địnhđịnh từtừ khikhi khaikhai báobáo đượcđược chỉchỉ địnhđịnh từtừ khikhi khaikhai báobáo char g = 'z'; 0x1132 g int main() { p c 'a' { char c = 'a'; char *p; p = &c; 0x1132 p g 0x91A2 p = &c; p = &g; return 0; } 'z' 0x91A2 } CtỏCtỏ Tá ử “*”Tá ử “*”  ““ ** ”” :: toántoán tửtử truytruy xuấtxuất giágiá trịtrị củacủa vùngvùng nhớnhớ đượcđược quảnquản lýlý C on t r ỏ C on t r ỏ T o á n t ử “*”T o á n t ử “*”  ** :: toántoán tửtử truytruy xuấtxuất giágiá trịtrị củacủa vùngvùng nhớnhớ đượcđược quảnquản lýlý bởibởiconcon trỏtrỏ #include <stdio.h> char g = 'z'; int main () a 0x1132 p c 'a' 0x1132 () { char c = 'a'; char * p; a z 0 91A2 0x1132 p g '' char p; p = &c; printf("%c\n", *p); p = &g; xuấtgiátrị do p đang 0 x 91A2 ' z ' 0x91A2 p = &g; printf("%c\n", *p); return 0; } xuất giá trị do p đang quản lý } CtỏCtỏ T ề h ố đị hỉT ề h ố đị hỉ C on t r ỏ C on t r ỏ T ruy ề n t h am s ố đị a c hỉT ruy ề n t h am s ố đị a c hỉ #include <stdio.h> void change(int *v); int main() int main() { int var = 5; change(&var); change(&var); printf("main: var = %i\n", var); return 0; } } void change(int *v) { (*v) *= 100; printf("change: *v = %i\n", (*v)); } Ctỏ NULLCtỏ NULL C on t r ỏ NULLC on t r ỏ NULL  GiáGiá t ịt ị đặđặ biệtbiệt đểđể hỉhỉ ằằ t ỏt ỏ khôkhô ảả lýlý ùù  GiáGiá t r ịt r ị đặ c đặ c biệtbiệt đểđể c hỉ c hỉ r ằ ngr ằ ng concon t r ỏt r ỏ khô ng khô ng qu ả nqu ả n lýlý v ù ngv ù ng nàonào GiáGiá trịtrị nàynày thườngthường đượcđượcdùngdùng đểđể chỉchỉ mộtmộtconcon trỏtrỏ khôngkhông hợphợp lệlệ khôngkhông hợphợp lệlệ #include <stdio.h> int main() int main() { int i = 13; short *p = NULL; if (p == NULL) printf(“Con trỏ không hợp lệ!\n"); else printf(“Giá trị : %hi\n", *p); return 0 ; ; } CtỏCtỏ Tá ử á“”Tá ử á“” C on t r ỏ C on t r ỏ T o á n t ử g á n “ = ”T o á n t ử g á n “ = ”  CóCó khákhá biệtbiệt ấtất tt khikhi thth hiệhiệ áá héhé áá 0 15A0  CóCó s ự s ự khá c khá c biệtbiệt r ất r ất quanquan t rọng t rọng khikhi th ực th ực hiệ n hiệ nc á cc á c phé p phé pg á ng á n:: int i = 10, j = 14; p i 10 14 0 x 15A0 j int* p = &i; int *q = &j; 10 0x15A0 14 q j 0x15A4 *p = *q; và: 0x15A4 14 0x15A0 int i = 10, j = 14; int * p = &i ; p i 10 0x15A4 p; int *q = &j; p=q; 0x15A0 q j 0x15A4 14 p = q; 0x15A4 L ệ tậL ệ tậ Điề àô ốĐiề àô ố L uy ệ n tậ p L uy ệ n tậ p –– Điề n v à o ô tr ố ng Điề n v à o ô tr ố ng int main(void) { int i=10 j=14 k; i 0x2100 int i = 10 , j = 14 , k; int *p = &i; int *q = &j; j 0x2104 *p += 1; p = &k; k 0x1208 *p = *q; p = q; *p = *q; p 0x120B q return 0; } q 0x1210 } [...]... C phát độ : malloc() và calloc() động: ll ll Hàm ll Hà malloc và calloc cho phép c p phát c c vùng nhớ à ll h hé ấ hát á ù hớ ngay trong l c chạy chương trình trình void *malloc( size_t size); *malloc( void *calloc( size_t nItems, size_t size); *calloc( nItems, Hàm calloc c p phát vùng nhớ và kh i tạo tất c c c bi ll ấ h h khởi ấ bit trong vùng nhớ mới c p phát về 0 Hàm malloc chỉ c p phát vùng nhớ... nhớ động C thể chỉ đị h vùng mới cho 1 con t ỏ quản lý bằ c c hỉ định ù ới h trỏ ả bằng á lệnh hàm malloc, calloc ho c toán tử new c a C+ + malloc, 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 int main() { int *p = new int[10]; p[0] = 1; p[3] = -7; 7; delete []p; return 0; } C p hát động malloc() à calloc() C phát... malloc, (calloc, free) calloc, C dùng hàm free để giải phóng vùng nhớ c p phát động động void free(void *block); C phát l i vùng nhớ: realloc C p hát lại ù hớ ll Đôi khi chúng t muốn mở rộng h ặ giảm bớt kích th ớ hú ta ố ở ộ ho c iả kí h thư c mảng mảng C dùng hàm realloc để c p phát lại vùng nhớ, th c hiện nhớ, chép nội dung c a vùng nhớ c sang vùng nhớ mới mới void *realloc(void *block, size_t.. .C t ỏ và Mả Con trỏ à Mảng Biến kiểu ả Biế kiể mảng là đị chỉ tĩnh c a một vùng nhớ, đ địa hỉ tĩ h ủ ột ù hớ đư c x c á định khi khai báo, không thay đổi trong suốt chu kỳ sống sống Biến con trỏ là địa chỉ động c a một vùng nhớ đư c x c nhớ, định qua phép gán địa chỉ khi chương trình th c thi thi #include int main() { int a[10] = {1 3 4 2 0}; {1, 3, 4, 2, int *p; p... nhiên c c vùng nhớ đư c cấp phát động vẫn c n tồn tại và đư c “đánh dấu” là đang “đư c dùng” bộ nhớ dấu” dùng” c a máy tính sẽ hết hết ví dụ: dụ: ụ void aFunction(void) aFunction(void) { int tmpArray, i *tmpArray, i = 5; tmpArray = (int *)malloc(i * sizeof(int)); (int *)malloc( sizeof(int)); )malloc } tmpArray i Giải phóng vùng nhớ: f hó ù nhớ: free hớ Sử d dụng c c cặp hà á ặ hàm (malloc, free) malloc,... printf(“0x%04X %i 0 %04X %i\ “ i tf(“0 %04X 0x%04X %i\n“, a, a[0], p, *p); return 0; } Con trỏ Toán ử “+” ới ố C t ỏ - T á tử “ ” với số nguyên ê #include int main() { short a[10] = {1, 3, 5, 2, 0}; short *p = a; printf( 0x%04X printf(“0x%04X %i 0x%04X %i\n“, %i\n a, a[0], p, *p); p ++; printf(“0x%04X %i 0 %04X %i\ “ i tf(“0 %04X 0x%04X %i\n“, a, a[0], p, *p); (*p) ++; printf(“0x%04X %i 0x%04X %i\n“,... chỉ c p phát vùng nhớ nhớ Ví d 1 dùng malloc() dụ 1: dù ll () 1 1 2 3 4 5 6 7 7 8 9 10 11 12 #include . v à v à ca ll occa ll oc ()() HàHà llll àà llll hh héhé ấấ háthát áá ùù hớhớ  Hà m Hà mma ll ocma ll oc v à v à ca ll occa ll oc c h oc h o phé p phé pc ấ pc ấ p phátphát c á cc á cv ù ngv ù ng n hớ n hớ ngayngay trongtrong lúcl c chạychạychươngchương trìnhtrình void *void *mallocmalloc(. “ && ””  ““ && ”” :: toántoán tửtử lấylấy địađịa chỉchỉ c acủa 11 biếnbiến  && :: toántoán tửtử lấylấy địađịa chỉchỉ c acủa 11 biếnbiến  ĐịaĐịachỉchỉ c acủatấttấtc c c cc c biếnbiếntrongtrong chươngchương trìnhtrình đềuđều. ỏ ảả lýlý bằbằ áá  C C thểthể c hỉ c hỉ đị n hđị n h v ù ngv ù ng m ới m ới c h oc h o 11 concon t r ỏt r ỏ qu ả nqu ả n lýlý bằ ng bằ ng c á cc á c lệnhlệnh hàmhàm mallocmalloc,, calloccalloc hoặcho c toántoán

Ngày đăng: 22/07/2014, 16:21

TỪ KHÓA LIÊN QUAN