Bài giảng Kỹ thuật lập trình: Con trỏ - Trịnh Tấn Đạt
Số trang: 90
Loại file: pdf
Dung lượng: 1.28 MB
Lượt xem: 16
Lượt tải: 0
Xem trước 9 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng "Kỹ thuật lập trình: Con trỏ" cung cấp cho người học các kiến thức: Con trỏ, các phép toán trên con trỏ, con trỏ và mảng một chiều, cấp phát vùng nhớ động, con trỏ cấp 2, con trỏ hàm,... Mời các bạn cùng tham khảo.
Nội dung trích xuất từ tài liệu:
Bài giảng Kỹ thuật lập trình: Con trỏ - Trịnh Tấn Đạt Con Trỏ (Pointer)Trịnh Tấn ĐạtKhoa CNTT - Đại Học Sài GònEmail: trinhtandat@sgu.edu.vnWebsite: https://sites.google.com/site/ttdat88/Nội dung ▪ Biến tĩnh vs. Biến động ▪ Con trỏ ▪ Các phép toán trên con trỏ ▪ Con trỏ và mảng một chiều ▪ Cấp phát vùng nhớ động ▪ Con trỏ cấp 2 ▪ Con trỏ và mảng nhiều chiều ▪ Mảng con trỏ ▪ Con trỏ hằng, void ▪ Con trỏ hàm (option)Biến tĩnh vs. Biến động▪ Một số hạn chế có thể gặp phải khi sử dụng các biến tĩnh: o Cấp phát ô nhớ dư, gây ra lãng phí ô nhớ. o Cấp phát ô nhớ thiếu, chương trình thực thi bị lỗi.▪ Biến động: o Khi chạy chương trình, kích thước của biến, vùng nhớ và địa chỉ vùng nhớ được cấp phát cho biến có thể thay đổi. o Sau khi sử dụng xong có thể giải phóng để tiết kiệm chỗ trong bộ nhớ.▪ Variable: Biến là một ô nhớ đơn lẻ hoặc một vùng nhớ được hệ điều hành cấp phát cho chương trình C++ nhằm để lưu trữ giá trị vào bên trong vùng nhớ đó.Ví dụ: int m; // một vùng nhớ có kích thước 4 bytes sẽ được cấp phát. Virtual memory & Physical memory❖ Virtual memory & Physicalmemory▪ Chúng ta chỉ có thể trỏ đến vùng nhớ ảo (virtual memory) trên máy tính, còn việc truy xuất đến bộ nhớ vật lý (physical memory) từ bộ nhớ ảo phải được thực hiện bởi thiết bị phần cứng có tên là Memory management unit (MMU) và một chương trình định vị địa chỉ bộ nhớ gọi là Virtual address space .Variable address & address-of operator▪ Địa chỉ của biến (variable address) mà chúng ta nhìn thấy thật ra chỉ là những giá trị đã được đánh số thứ tự đặt trên Virtual memory.▪ Để lấy được địa chỉ ảo của biến trong chương trình, chúng ta sử dụng toán tử lấy địa chỉ (address-of operator) ‘&’ đặt trước tên biến.Ví dụ:int x = 5;std::cout Reference ▪ Tham chiếu (Reference) : Mục đích của tham chiếu trong C++ là tạo ra một biến khác có cùng kiểu dữ liệu nhưng sử dụng chung vùng nhớ với biến được tham chiếu đến. ▪ Ví dụ: Lưu ý: address-of operator và reference dùng chung 1 ký hiệu &Như vậy, mọi hành vi thay đổi giá trị của i_ref đều tác động trực tiếp đến i1.Lưu ý: Biến tham chiếu sẽ có địa chỉ cố định sau khi khởi tạo. Chúng ta không thể tham chiếu lại lần nữa.Dereference operator▪ Toán tử trỏ đến (dereference operator) hay còn gọi là indirection operator (toán tử điều hành gián tiếp) được kí hiệu bằng dấu sao * cho phép chúng ta lấy ra giá trị của vùng nhớ có địa chỉ cụ thể.▪ Ví dụ:Dereference operator▪ Ngoài việc truy xuất giá trị trong vùng nhớ của một địa chỉ cụ thể, toán tử trỏ đến (dereference operator) còn có thể dùng để thay đổi giá trị bên trong vùng nhớ đó.Dereference operator▪ Toán tử trỏ đến cho phép chúng ta thao tác trực tiếp trên Virtual memory mà không cần thông qua định danh (tên biến).▪ Khác với tham chiếu (reference), toán tử trỏ đến (dereference operator) không tạo ra một tên biến khác, mà nó truy xuất trực tiếp đến vùng nhớ có địa chỉ cụ thể trên Virtual memory.Con trỏ (Pointer)▪ Một con trỏ (pointer) là một biến (kiểu dữ liệu) được dùng để lưu trữ địa chỉ của biến khác.▪ Khác với tham chiếu, con trỏ là một biến có địa chỉ độc lập so với vùng nhớ mà nó trỏ đến, nhưng giá trị bên trong vùng nhớ của con trỏ chính là địa chỉ của biến (hoặc địa chỉ ảo) mà nó trỏ tới.❖ Kiểu con trỏ cho phép: o Truyền tham số kiểu địa chỉ o Biểu diễn các kiểu, cấu trúc dữ liệu động o Lưu trữ dữ liệu trong vùng nhớ heapCon trỏ (Pointer)▪ Khai báo con trỏ trong C/C++: Kiểu con trỏ phải được định nghĩa trên một kiểu cơ sở đã được định nghĩa trước đó kiểucơsở *Tênkiểu;▪ Ví dụ: int x; // x là kiểu int int *px; // px là con trỏ đến int int *p1, *p2; // // p1 và p2 là con trỏ đến int float *pf; // pf là con trỏ đến float double *pd; // pd là con trỏ đến double char c, d, *pc; // c và d kiểu char ; pc là con trỏ đến char Lưu ý: Dấu sao “*” trong con trỏ không phải là toán tử trỏ đến (dereference operator) , nó là cú pháp được ngôn ngữ C/C++ qui địnhCon trỏ (Pointer)▪ Lưu ý : Kiểu dữ liệu của con trỏ không mô tả giá trị địa chỉ được lưu trữ bên trong con trỏ, mà kiểu dữ liệu của con trỏ dùng để xác định kiểu dữ liệu của biến mà nó trỏ đến trên bộ nhớ ảo.Con trỏ (Pointer)❖ Con trỏ và toán tử lấy địa chỉ & (address-of operator)▪ “&”: toán tử lấy địa chỉ của 1 biến▪ Địa chỉ của tất cả các biến trong chương trình đều đã được chỉ định từ khi khai báo▪ Gán giá trị cho con trỏ: Giá trị mà biến con trỏ lư ...
Nội dung trích xuất từ tài liệu:
Bài giảng Kỹ thuật lập trình: Con trỏ - Trịnh Tấn Đạt Con Trỏ (Pointer)Trịnh Tấn ĐạtKhoa CNTT - Đại Học Sài GònEmail: trinhtandat@sgu.edu.vnWebsite: https://sites.google.com/site/ttdat88/Nội dung ▪ Biến tĩnh vs. Biến động ▪ Con trỏ ▪ Các phép toán trên con trỏ ▪ Con trỏ và mảng một chiều ▪ Cấp phát vùng nhớ động ▪ Con trỏ cấp 2 ▪ Con trỏ và mảng nhiều chiều ▪ Mảng con trỏ ▪ Con trỏ hằng, void ▪ Con trỏ hàm (option)Biến tĩnh vs. Biến động▪ Một số hạn chế có thể gặp phải khi sử dụng các biến tĩnh: o Cấp phát ô nhớ dư, gây ra lãng phí ô nhớ. o Cấp phát ô nhớ thiếu, chương trình thực thi bị lỗi.▪ Biến động: o Khi chạy chương trình, kích thước của biến, vùng nhớ và địa chỉ vùng nhớ được cấp phát cho biến có thể thay đổi. o Sau khi sử dụng xong có thể giải phóng để tiết kiệm chỗ trong bộ nhớ.▪ Variable: Biến là một ô nhớ đơn lẻ hoặc một vùng nhớ được hệ điều hành cấp phát cho chương trình C++ nhằm để lưu trữ giá trị vào bên trong vùng nhớ đó.Ví dụ: int m; // một vùng nhớ có kích thước 4 bytes sẽ được cấp phát. Virtual memory & Physical memory❖ Virtual memory & Physicalmemory▪ Chúng ta chỉ có thể trỏ đến vùng nhớ ảo (virtual memory) trên máy tính, còn việc truy xuất đến bộ nhớ vật lý (physical memory) từ bộ nhớ ảo phải được thực hiện bởi thiết bị phần cứng có tên là Memory management unit (MMU) và một chương trình định vị địa chỉ bộ nhớ gọi là Virtual address space .Variable address & address-of operator▪ Địa chỉ của biến (variable address) mà chúng ta nhìn thấy thật ra chỉ là những giá trị đã được đánh số thứ tự đặt trên Virtual memory.▪ Để lấy được địa chỉ ảo của biến trong chương trình, chúng ta sử dụng toán tử lấy địa chỉ (address-of operator) ‘&’ đặt trước tên biến.Ví dụ:int x = 5;std::cout Reference ▪ Tham chiếu (Reference) : Mục đích của tham chiếu trong C++ là tạo ra một biến khác có cùng kiểu dữ liệu nhưng sử dụng chung vùng nhớ với biến được tham chiếu đến. ▪ Ví dụ: Lưu ý: address-of operator và reference dùng chung 1 ký hiệu &Như vậy, mọi hành vi thay đổi giá trị của i_ref đều tác động trực tiếp đến i1.Lưu ý: Biến tham chiếu sẽ có địa chỉ cố định sau khi khởi tạo. Chúng ta không thể tham chiếu lại lần nữa.Dereference operator▪ Toán tử trỏ đến (dereference operator) hay còn gọi là indirection operator (toán tử điều hành gián tiếp) được kí hiệu bằng dấu sao * cho phép chúng ta lấy ra giá trị của vùng nhớ có địa chỉ cụ thể.▪ Ví dụ:Dereference operator▪ Ngoài việc truy xuất giá trị trong vùng nhớ của một địa chỉ cụ thể, toán tử trỏ đến (dereference operator) còn có thể dùng để thay đổi giá trị bên trong vùng nhớ đó.Dereference operator▪ Toán tử trỏ đến cho phép chúng ta thao tác trực tiếp trên Virtual memory mà không cần thông qua định danh (tên biến).▪ Khác với tham chiếu (reference), toán tử trỏ đến (dereference operator) không tạo ra một tên biến khác, mà nó truy xuất trực tiếp đến vùng nhớ có địa chỉ cụ thể trên Virtual memory.Con trỏ (Pointer)▪ Một con trỏ (pointer) là một biến (kiểu dữ liệu) được dùng để lưu trữ địa chỉ của biến khác.▪ Khác với tham chiếu, con trỏ là một biến có địa chỉ độc lập so với vùng nhớ mà nó trỏ đến, nhưng giá trị bên trong vùng nhớ của con trỏ chính là địa chỉ của biến (hoặc địa chỉ ảo) mà nó trỏ tới.❖ Kiểu con trỏ cho phép: o Truyền tham số kiểu địa chỉ o Biểu diễn các kiểu, cấu trúc dữ liệu động o Lưu trữ dữ liệu trong vùng nhớ heapCon trỏ (Pointer)▪ Khai báo con trỏ trong C/C++: Kiểu con trỏ phải được định nghĩa trên một kiểu cơ sở đã được định nghĩa trước đó kiểucơsở *Tênkiểu;▪ Ví dụ: int x; // x là kiểu int int *px; // px là con trỏ đến int int *p1, *p2; // // p1 và p2 là con trỏ đến int float *pf; // pf là con trỏ đến float double *pd; // pd là con trỏ đến double char c, d, *pc; // c và d kiểu char ; pc là con trỏ đến char Lưu ý: Dấu sao “*” trong con trỏ không phải là toán tử trỏ đến (dereference operator) , nó là cú pháp được ngôn ngữ C/C++ qui địnhCon trỏ (Pointer)▪ Lưu ý : Kiểu dữ liệu của con trỏ không mô tả giá trị địa chỉ được lưu trữ bên trong con trỏ, mà kiểu dữ liệu của con trỏ dùng để xác định kiểu dữ liệu của biến mà nó trỏ đến trên bộ nhớ ảo.Con trỏ (Pointer)❖ Con trỏ và toán tử lấy địa chỉ & (address-of operator)▪ “&”: toán tử lấy địa chỉ của 1 biến▪ Địa chỉ của tất cả các biến trong chương trình đều đã được chỉ định từ khi khai báo▪ Gán giá trị cho con trỏ: Giá trị mà biến con trỏ lư ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Kỹ thuật lập trình Kỹ thuật lập trình Con trỏ Cấp phát vùng nhớ động Con trỏ cấp 2 Con trỏ hàmTài liệu có liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 310 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 249 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 223 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 189 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 160 0 0 -
Báo cáo thực tập Công nghệ thông tin: Lập trình game trên Unity
27 trang 127 0 0 -
Giáo trình về phân tích thiết kế hệ thống thông tin
113 trang 121 0 0 -
LUẬN VĂN: Tìm hiểu kỹ thuật tạo bóng cứng trong đồ họa 3D
41 trang 115 0 0 -
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 trang 113 0 0 -
Giáo trình Nhập môn lập trình VB6: Phần 2
184 trang 111 0 0