Bài giảng Kỹ thuật lập trình: Con trỏ - Nguyễn Minh Huy
lượt xem 3
download
Bài giảng Kỹ thuật lập trình: Con trỏ, được biên soạn gồm các nội dung chính sau Khái niệm con trỏ; Sử dụng con trỏ; Con trỏ vs mảng. Mời các bạn cùng tham khảo!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Kỹ thuật lập trình: Con trỏ - Nguyễn Minh Huy
- Con trỏ GV. Nguyễn Minh Huy Kỹ thuật lập trình - Nguyễn Minh Huy 1
- Nội dung Khái niệm con trỏ. trỏ. Sử dụng con trỏ. trỏ. Con trỏ vs. mảng. mảng. Kỹ thuật lập trình - Nguyễn Minh Huy 2
- Nội dung Khái niệm con trỏ. trỏ. Sử dụng con trỏ. trỏ. Con trỏ vs. mảng. mảng. Kỹ thuật lập trình - Nguyễn Minh Huy 3
- Khái niệm con trỏ Bộ nhớ máy tính: tính: RAM (Random Access Memory): (R RAM (4GB) 0 Primary vs. Secondary memory. RAM dùng để chứa: chứa: Hệ điều hành. hành. Chương trình: lệnh + dữ liệu. trình: liệu. … Bao gồm các ô nhớ 1 byte. RAM 4GB ~ 4 tỷ ô nhớ. nhớ. Mỗi ô nhớ có địa chỉ đánh số từ 0. RAM 4GB địa chỉ từ 0 232 – 1. 232 Kỹ thuật lập trình - Nguyễn Minh Huy 4
- Khái niệm con trỏ Địa chỉ biến: biến: Điều gì xảy ra khi khai báo biến? biến? Cấp một dãy ô nhớ liên tiếp. tiếp. int x; Gắn tên biến với địa chỉ ô đầu dãy. dãy. 65 66 67 68 Bao nhiêu ô? kiểu dữ liệu. liệu. x ? ? ? ? Địa chỉ biến = địa chỉ ô đầu tiên. tiên. Giá trị biến được lưu thế nào? nào? Chia giá trị biến thành các byte. x = 1057; Lưu mỗi byte vào một ô nhớ. nhớ. 65 66 67 68 Thứ tự lưu: lưu: x 33 4 0 0 Byte thấp đến cao. cao. Ô đầu đến cuối dãy. dãy. Kỹ thuật lập trình - Nguyễn Minh Huy 5
- Khái niệm con trỏ Kiểu địa chỉ trong C: Mỗi biến có một địa chỉ. chỉ. Địa chỉ biến có kiểu: *. kiểu: Biến int có địa chỉ kiểu int *. Toán tử &: Công dụng: lấy địa chỉ của biến. dụng: biến. Cú pháp: &; pháp: biến>; x = 1057; int x = 1057; 65 66 67 68 float y = 1.25; x 33 4 0 0 int *address_x = &x; float *address_y = &y; *address_y 91 92 93 94 address_x 65 0 0 0 Kỹ thuật lập trình - Nguyễn Minh Huy 6
- Khái niệm con trỏ Con trỏ trong C: Là biến có kiểu địa chỉ. chỉ. Lưu địa chỉ của biến khác. khác. Kích thước con trỏ: trỏ: Bằng nhau dù khác kiểu địa chỉ. chỉ. Bằng kích thước số nguyên int. Tùy thuộc vào hệ máy tính. tính. Ví dụ: dụ: - Hệ máy 16-bit, 2 bytes. 16- - Hệ máy 32-bit, 4 bytes. 32- Kỹ thuật lập trình - Nguyễn Minh Huy 7
- Nội dung Khái niệm con trỏ. trỏ. Sử dụng con trỏ. trỏ. Con trỏ vs. mảng. mảng. Kỹ thuật lập trình - Nguyễn Minh Huy 8
- Sử dụng con trỏ Khai báo con trỏ: trỏ: Khai báo biến có kiểu địa chỉ. chỉ. Cách 1: *; liệu> trỏ>; int *p1; // Con trỏ kiểu int. float *p2; // Con trỏ kiểu float. Cách 2: typedef * ; liệu> thế>; ; thế> ; typedef int * ConTroInt; ConTroInt; typedef float * ConTroFloat; ConTroFloat; ConTroInt p1; ConTroFloat p2; Kỹ thuật lập trình - Nguyễn Minh Huy 9
- Sử dụng con trỏ Khởi tạo con trỏ: trỏ: Con trỏ vừa khai báo nhận địa chỉ nào? nào? Toán tử &: khởi tạo địa chỉ cho con trỏ. trỏ. = &; trỏ> biến>; int x; int *p = &x; Con trỏ kiểu gì thì chỉ nhận địa chỉ của biến kiểu đó!! đó!! float y; int *q = &y; // Sai. Sai. Địa chỉ NULL: Địa chỉ rỗng, không thuộc ô nhớ nào. rỗng, nào. Dùng để khởi tạo địa chỉ mặc định cho con trỏ. trỏ. int *r = NULL; NULL; // r nhận địa chỉ rỗng. rỗng. Kỹ thuật lập trình - Nguyễn Minh Huy 10
- Sử dụng con trỏ Truy xuất nội dung vùng nhớ: nhớ: Toán tử *: Công dụng: truy xuất nội dung vùng nhớ con trỏ giữ địa chỉ. dụng: chỉ. Cú pháp: = *; pháp: trỏ>; int x = 5; int *p = &x; int k = *p; *p; // lấy giá trị của x. printf(“%d\ printf(“%d\n”, p); // Xuất địa chỉ x. printf(“%d\ *p); printf(“%d\n”, *p); // Xuất giá trị x. printf(“%d\ &p); printf(“%d\n”, &p); // Xuất địa chỉ p. Con trỏ “trỏ” đến vùng nhớ nó giữ địa chỉ!! trỏ” chỉ!! 72 73 74 75 91 92 93 94 x 5 0 0 0 p 72 0 0 0 Kỹ thuật lập trình - Nguyễn Minh Huy 11
- Sử dụng con trỏ Truyền tham số con trỏ: trỏ: void foo( int *g ) foo( { Truyền tham trị: trị: *g = *g + 1; Truyền bản sao con trỏ vào hàm. hàm. g = g + 1; Giá trị con trỏ KHÔNG thay đổi. đổi. } Nội dung vùng nhớ con trỏ “trỏ” đến trỏ” void main() main() CÓ THỂ bị thay đổi. đổi. { int x = 5; int *p = &x; main() 72 73 74 75 foo(int *g) foo(p); foo( x 5 0 0 0 66 67 68 69 foo(&x); foo(&x); g 72 0 0 0 // Giá trị x đổi. đổi. } 91 92 93 94 p 72 0 0 0 Kỹ thuật lập trình - Nguyễn Minh Huy 12
- Sử dụng con trỏ Truyền tham số con trỏ: trỏ: void foo( int *&g ) foo( *&g { Truyền tham chiếu: chiếu: *g = *g + 1; Truyền bản gốc con trỏ vào hàm. hàm. g=g+1 Giá trị con trỏ CÓ THỂ thay đổi. đổi. } Nội dung vùng nhớ con trỏ “trỏ” đến trỏ” void main() main() CÓ THỂ bị thay đổi. đổi. { int x = 5; int *p = &x; main() 72 73 74 75 foo(p); foo( x 5 0 0 0 foo(&x); // Sai foo(&x); // Giá trị x đổi. đổi. 91 92 93 94 foo(int *&g) // Giá trị p đổi. đổi. p 72 0 0 0 g } Kỹ thuật lập trình - Nguyễn Minh Huy 13
- Sử dụng con trỏ Con trỏ cấu trúc: trúc: Giữ địa chỉ biến cấu trúc. trúc. Khai báo: báo: Cách 1: *; trỏ>; Cách 2: typedef * ; trúc> thế>; ; thế> ; struct PhanSo { int tu, mau; tu, mau; }; typedef PhanSo * ConTroPhanSo; ConTroPhanSo; PhanSo *p; ConTroPhanSo q; Kỹ thuật lập trình - Nguyễn Minh Huy 14
- Sử dụng con trỏ Con trỏ cấu trúc: trúc: Truy xuất thành phần: phần: Cách 1: (*).; (*< trỏ> .; Cách 2: ->; phần>; PhanSo p; ConTroPhanSo q = &p; (*q).tu = 1; (*q q->mau = 2; Kỹ thuật lập trình - Nguyễn Minh Huy 15
- Nội dung Khái niệm con trỏ. trỏ. Sử dụng con trỏ. trỏ. Con trỏ vs. mảng. mảng. Kỹ thuật lập trình - Nguyễn Minh Huy 16
- Con trỏ vs. mảng Mảng trong C: Là một con trỏ. trỏ. Giữ địa chỉ phần tử đầu tiên. tiên. void main() main() { int a[ 10 ]; printf(“%d\ printf(“%d\n”, a); printf(“%d\ &a[0]); printf(“%d\n”, &a[0]); // a == &a[0]. } a[0] a[1] a[2] 72 73 74 75 76 77 78 79 80 81 82 83 a 1 0 0 0 2 0 0 0 3 0 0 0 … Kỹ thuật lập trình - Nguyễn Minh Huy 17
- Con trỏ vs. mảng Con trỏ đến mảng: mảng: Truy xuất mảng gián tiếp. tiếp. Xét đoạn chương trình sau: sau: int a[100] = { 1, 2, 3 }; int *p = a; a; *p = *p + 1; printf(“%d\ printf(“%d\n”, *p); Cơ chế hoạt động: động: a[0] a[1] a[2] 72 73 74 75 76 77 78 79 80 81 82 83 a 1 0 0 0 2 0 0 0 3 0 0 0 … 44 45 46 47 p 72 0 0 0 Kỹ thuật lập trình - Nguyễn Minh Huy 18
- Con trỏ vs. mảng Phép toán tăng, giảm con trỏ: tăng, trỏ: Giá trị con trỏ tăng giảm theo kích thước kiểu dữ liệu. liệu. Công thức: thức: +/- k = +/- k * sizeof(). trỏ> +/- +/- sizeof(). int a[100] = { 1, 2, 3 }; int *p = a; a; printf(“%d\ printf(“%d\n”, p + 1); 1); printf(“%d\ printf(“%d\n”, *(p + 2) ); a[0] a[1] a[2] 72 73 74 75 76 77 78 79 80 81 82 83 a 1 0 0 0 2 0 0 0 3 0 0 0 … 44 45 46 47 p+1 p+2 p 72 0 0 0 Kỹ thuật lập trình - Nguyễn Minh Huy 19
- Con trỏ vs. mảng Toán tử [ ]: Truy xuất nội dung vùng nhớ con trỏ giữ địa chỉ. chỉ. Công thức: thức: [] ~ * ( + ) trỏ>[] trỏ> ) int a[100] = { 1, 2, 3 }; int *p = a; a[2] = 5; *(a + 2) = 5; *(p + 2) = 5; p[2] = 5; Kỹ thuật lập trình - Nguyễn Minh Huy 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Kỹ thuật lập trình - Phạm Thế Bảo
0 p | 220 | 32
-
Bài giảng Kỹ thuật lập trình: Chương I - Lưu Hồng Việt
48 p | 194 | 23
-
Bài giảng Kỹ thuật lập trình: Chương IV - Lưu Hồng Việt
32 p | 151 | 17
-
Bài giảng Kỹ thuật lập trình: Chương III - Lưu Hồng Việt
51 p | 147 | 15
-
Bài giảng Kỹ thuật lập trình: Chương V - Lưu Hồng Việt
19 p | 127 | 15
-
Bài giảng Kỹ thuật lập trình: Phần 1 - ĐH CNTT&TT
37 p | 114 | 10
-
Bài giảng Kỹ thuật lập trình - Bài 1: Tổng quan về kỹ thuật lập trình
65 p | 165 | 8
-
Bài giảng Kỹ thuật lập trình: Bài 1 - Phạm Đình Sắc
9 p | 129 | 7
-
Bài giảng Kỹ thuật lập trình nâng cao: Chương 4 - ThS. Dương Thành Phết
26 p | 92 | 7
-
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 p | 15 | 4
-
Bài giảng Kỹ thuật lập trình: Chương 1 - Trần Quang
39 p | 8 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 2 - Trần Quang
25 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 3 - Trần Quang
52 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 4 - Trần Quang
32 p | 7 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 6 - Trần Quang
37 p | 11 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
28 p | 6 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 8 - Trần Quang
34 p | 8 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 9 - Trần Quang
33 p | 4 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn