Danh mục

Bài giảng Lập trình nâng cao - Chương 7: Con trỏ

Số trang: 54      Loại file: pdf      Dung lượng: 629.55 KB      Lượt xem: 13      Lượt tải: 0    
Jamona

Xem trước 6 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bài giảng "Lập trình nâng cao - Chương 7: Con trỏ" cung cấp cho người học các kiến thức: Cơ chế bộ nhớ, cách sử dụng, cơ chế truyền tham số, lỗi thường gặp, các phép toán, con trỏ và mảng. Mời các bạn cùng tham khảo nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình nâng cao - Chương 7: Con trỏ Contrỏ LậptrìnhnângcaoMộtsốnộidunglấytừslicecủaUriDekel,CMU Outline•  Cơchếbộnhớ•  Cáchsửdụng•  Cơchếtruyềnthamsố –  Truyềnbằngcontrỏ-Pass-by-pointer•  Lỗithườnggặp•  Cácphéptoán –  Đổikiểu,+,-,++,--•  Contrỏvàmảng Cơchếbộnhớ•  Contrỏlàmộtbiến –  Nócómộtđịachỉvàlưumộtgiátrị –  Nhưnggiátrịcủanóđượchiểulàđịachỉbộnhớ.•  Xx; //biếnkiểuX•  X*p; //biếnkiểucontrỏtớigiátrịkiểuX•  Kíchthướccủacontrỏkhôngphụthuộckiểudữliệu nótrỏtới. Gángiátrịchocontrỏ Gángiátrịsố Gánđịachỉcủabiến GángiátrịcontrỏkhácGánđịachỉcủahàm(ngoàichươngtrình) Dereferencing LấygiátrịbiếncontrỏtrỏtớiNếupXlàcontrỏthì(*pX)truynhậpvùngnhớpXtrỏtới.-(*pC1)tươngđươngvớic-ctươngđươngvới(*(&c))Dereferencing-Vídụ Cóthểdùng(*pX)tươngtự nhưdùngbiếnmàpXtrỏtới - Đọcgiátrị - Ghigiátrịmới - Trảvềgiátrị pass-by-pointervoid swap(int* px, int* py) { int c; c = *px; *px = *py; *py = c;}int main() { int a = 20; int b = 25; swap(&a, &b); cout pass-by-pointervoid swap(int* px, int* py) { int c; c = *px; *px = *py; *py = c;}int main() { int a = 20; int b = 25; swap(&a, &b); cout pass-by-pointervoid swap(int* px, int* py) { int c; c = *px; *px = *py; *py = c;}int main() { int a = 20; int b = 25; swap(&a, &b); cout pass-by-pointervoid swap(int* px, int* py) { int c; c = *px; *px = *py; *py = c;}int main() { int a = 20; int b = 25; swap(&a, &b); cout pass-by-pointervoid swap(int* px, int* py) { int c; c = *px; *px = *py; Thamsốlàcontrỏ *py = c;}int main() { int a = 20; Đốisốlàđịachỉ int b = 25; swap(&a, &b); cout Lỗithườnggặp–contrỏchưakhởitạo•  Contrỏchưakhởitạocóthểchứadữliệurác –địachỉngẫunhiên•  Truynhậpchúngdẫnđếncáclỗighiđèdữ liệu,ghivàovùngcấmghi….segmenta~on faults,v.v..Lỗithườnggặp:truynhậpcontrỏnull•  Tươngđươngtruynhậpđịachỉ0trongbộ nhớ Lỗithườnggặp:danglingreferences•  danglingreference:truynhậptớivùngnhớkhông cònhợplệ•  Vídụ:trảvềcontrỏtớibiếnđịaphương int* weird_sum(int a, int b) { int c; c = a + b; return &c; }•  Lờikhuyên:đừnggiữcontrỏtớibiếncóphạmvi nhỏhơnchínhbiếncontrỏđó. Đổikiểu char a = ‘a’; char* p1 = &a; int* p2 = (int*)p1; *p2 = ‘b’;•  Rủiro,khôngkhuyếnkhích•  Trìnhbiêndịchcảnhbáo•  Phảiđổikiểulàdấuhiệucủathiếtkếtồi void*•  Kiểucontrỏtrỏđếnloạidữliệukhôngxác địnhkiểu.•  Lậptrìnhviêntựchịutráchnhiệmépkiểu Hằngcontrỏ•  Đọctừphảisangtráiconstint*p1=&a;//contrỏtớihằngintint*constp2=&b;//hằngcontrỏconstint*constp3=&c;//hằngcontrỏtớihằngintHằngcontrỏ

Tài liệu được xem nhiều: