
Bài giảng Lập trình nâng cao: Bài 7+8+9 - Trương Xuân Nam
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình nâng cao: Bài 7+8+9 - Trương Xuân NamLẬP TRÌNH NÂNG CAOBài 7+8+9: Con trỏ và bộ nhớ trong C/C++ TRƯƠNG XUÂN NAM 1Nội dung chính1. Bộ nhớ máy tính2. Biến và địa chỉ của biến3. Biến con trỏ4. Mảng và con trỏ5. Bộ nhớ động6. Con trỏ hàm7. Bài tập Trương Xuân Nam - Khoa CNTT 2Phần 1Bộ nhớ máy tính TRƯƠNG XUÂN NAM 3Các kiểu lưu trữ thông tin trên máy tính TRƯƠNG XUÂN NAM 4RAM▪ RAM (random access memory) ▪ Một dãy các byte liên tiếp (một mảng byte khổng lồ) ▪ Mọi thứ đều nằm trên đó • Hệ điều hành • Các trình điều khiển thiết bị • Các chương trình • Mã chương trình • Hằng số, trực trị • Biến • ...▪ Do tất cả đều nằm trên bộ nhớ, về lý thuyết: ▪ Có thể biết chính xác “địa chỉ” của chúng? ▪ Có thể “tóm” được chúng và đọc / ghi giá trị? TRƯƠNG XUÂN NAM 5Bộ nhớ vật lý và bộ nhớ bảo vệ TRƯƠNG XUÂN NAM 6Bộ nhớ của chương trình C/C++ TRƯƠNG XUÂN NAM 7Phần 2Biến và địa chỉ của biến TRƯƠNG XUÂN NAM 8Biến và địa chỉ của biến▪ Biến nằm trong bộ nhớ, nó phải nằm ở một (vài) ô nhớ nào đó, vị trí này gọi là địa chỉ (address) của biến▪ Phép toán địa chỉ: & ▪ Trả về địa chỉ của biến ▪ Thường là một số 32 bit (tùy vào CPU, OS và kiểu chương trình) ▪ In ra màn hình ở dạng hexadecima▪ Ví dụ: int a[] = { 1, 3, 2, 4, 2 }; cout Phần 3Biến con trỏ TRƯƠNG XUÂN NAM 10Biến con trỏ▪ Con trỏ = Kết quả của phép lấy địa chỉ &▪ Ta có thể lưu trữ kết quả này vào một biến hay không? ▪ Có, sử dụng biến có kiểu “con trỏ” ▪ Khai báo như biến bình thường, thêm dấu * trước tên biến▪ Ví dụ: int a = 10; int *pa = &a; // con trỏ tới biến a cout Khai báo và khởi tạo con trỏ▪ Khai báo: như một biến thông thường, hơi rối hơn chút int *p1; // con trỏ đến giá trị int double *p2; // con trỏ đến giá trị thực bool *p3; // con trỏ đến giá trị logic int **p4; // con trỏ đến con trỏ kiểu nguyên▪ Khởi tạo: int n; int *p1 = &n; // con trỏ đến n double *p2; // con trỏ đến đâu??? bool *p3 = NULL; // con trỏ NULL▪ Nếu không khởi tạo thì sao? Có thể gây lỗi▪ Khởi tạo có chắc chắn an toàn? Không chắc ▪ NULL là một giá trị đặc biệt, bằng 0 (nullptr từ C++11) TRƯƠNG XUÂN NAM 12Sử dụng con trỏ▪ Con trỏ thì có ích gì? ▪ Máy tính dùng con trỏ trong thao tác bộ nhớ, đoạn mã dùng con trỏ sẽ có tốc độ cao hơn do dễ dàng dịch thành các mã máy tương ứng (lý do ngôn ngữ lập trình C/C++ chạy nhanh) ▪ Biết địa chỉ của biến, biết biến đó nằm ở đâu trong bộ nhớ ▪ Thông qua con trỏ, có thể truy cập vào biến để đọc/ghi giá trị▪ Phép toán truy cập với con trỏ: *▪ Ví dụ: int n = 1, m = 2; int *p = &n; // p trỏ đến n *p = 100; // n = 100 p = &m; // p trỏ đến m *p = 200; // m = 200 TRƯƠNG XUÂN NAM 13Con trỏ làm tham số của hàm: có gì đặc biệt?#include ①In ra b (b = 5)using namespace std; ②Phát lời gọi hàm, gán tham số: a = &b (*a ≈ b)void change(int * a) { *a = 10; ③Thay đổi *a = 10 (b = 10) cout Quy tắc sử dụng con trỏ▪ Con trỏ là khái niệm quan trọng và khó trong C/C++ ▪ Nhiều công ty phần mềm đánh giá mức độ thành thạo C/C++ qua khả năng hiểu và sử dụng con trỏ của ứng viên▪ Hai phép toán đối lập: & và * ▪ Phép & trả về địa chỉ của biến ▪ Phép * trả về biến từ địa chỉ▪ Quy tắc cặp đôi: int a, *pa = &a; ▪ *pa và a đều chỉ nội dung của biến a • *pa còn được gọi là truy cập gián tiếp vào a ▪ pa và &a đều là địa chỉ của biến a▪ Con trỏ phải được khởi tạo, nếu chưa biết trỏ đến biến nào thì gán bằng NULL / nullptr TRƯƠNG XUÂN NAM 15Phép toán trên con trỏ▪ Phép lấy biến (đã học): *pa▪ Phép gán: p1 = p2 ▪ Hai con trỏ bằng nhau, trỏ đến cùng một chỗ TRƯƠNG XUÂN NAM 16Phép toán trên con trỏ▪ Phép cộng với số nguyên: pa + n ▪ Tăng / Giảm địa chỉ, trả về con trỏ đến biến tiếp theo trong bộ nhớ (chú ý!) ▪ Giá trị n có thể âm ▪ Có thể dùng ++ , += hoặc --, -= TRƯƠNG XUÂN NAM 17Phép toán trên con trỏ▪ Tính khoảng cách giữa hai con trỏ: pa-pb ▪ Đối ngẫu với phép cộng con trỏ với số nguyên ▪ Kết quả trả về là số nguyên ▪ Là khoảng cách giữa hai con trỏ, tính bằng số lượng biến cùng ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Lập trình nâng cao Lập trình nâng cao Biến con trỏ Bộ nhớ động Con trỏ hàm Bộ nhớ máy tínhTài liệu có liên quan:
-
50 trang 532 0 0
-
Giáo trình Hệ điều hành: Phần 2
53 trang 254 0 0 -
78 trang 177 3 0
-
124 trang 135 3 0
-
142 trang 134 0 0
-
Giáo trình Ngôn ngữ lập trình 2
50 trang 114 0 0 -
Giáo trình Lập trình nâng cao (Nghề Lập trình máy tính): Phần 2 - Tổng cục dạy nghề
169 trang 95 0 0 -
Đề thi kết thúc học phần Lập trình nâng cao - Học viện Nông nghiệp Việt Nam
1 trang 87 0 0 -
Giáo trình Lập trình nâng cao: Phần 2 - Nguyễn Văn Vinh
153 trang 49 0 0 -
Bài giảng Kiến trúc máy tính và hệ điều hành: Bài 8 - Nguyễn Hồng Sơn
41 trang 49 0 0 -
Giáo trình Phần cứng máy tính (Nghề: Tin học văn phòng - Trung cấp) - Trường Cao đẳng Cơ giới (2022)
80 trang 48 2 0 -
Bài giảng Kiến trúc máy tính và hợp ngữ - Chương 6: Bộ nhớ máy tính
61 trang 45 0 0 -
Bài giảng môn học Kiến trúc máy tính - Bộ nhớ
33 trang 45 0 0 -
Đề cương ôn tập môn học cấu trúc máy tính
50 trang 43 0 0 -
Bài giảng Lập trình nâng cao: Bài 10+11+12 - Trương Xuân Nam
44 trang 41 0 0 -
Bài giảng Kiến trúc máy tính - ThS. Nguyễn Phan Trung
410 trang 41 0 0 -
Lập trình tự động hóa PLC S7-300 với TIA Portal: Phần 2
233 trang 41 0 0 -
Bài giảng Hệ thống máy tính - Chương 0: Giới thiệu
7 trang 40 0 0 -
8 trang 40 0 0
-
Bài giảng Lập trình cơ bản: Bài 6 - Chu Thị Hường
38 trang 39 0 0