Thông tin tài liệu:
Bài giảng Kỹ thuật lập trình C: Bài 7 Con trỏ và cấp phát bộ nhớ động, cung cấp cho người học những kiến thức như: Con trỏ và địa chỉ; Cấp phát và giải phóng bộ nhớ động. 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 C: Bài 7 - Hoàng Quốc Tuấn KỸ THUẬT LẬP TRÌNH CBÀI 7: CON TRỎ VÀ CẤP PHÁT BỘ NHỚ ĐỘNG Hoàng Quốc Tuấn tuanhq@fpt.edu.vn http://hoangquoctuanpro.wordpress.comNội dung Con trỏ và địa chỉ Cấp phát và giải phóng bộ nhớ động 2I – Con trỏ và địa chỉ1. Toán tử địa chỉ2. Con trỏ3. Quy tắc sử dụng con trỏ 31 – Toán tử địa chỉ Các khái niệm liên quan đến biến Địa chỉ của biến Khái niệm Phân loại địa chỉ biến Phép lấy địa chỉ của một biến 41.1 – Các khái niệm liên quan đến biến Liên quan đến biến có ba khái niệm: Tên biến Kiểu biến Giá trị của biến Ví dụ: int a = 15 ; Kiểu biến Tên biến Giá trị của biến 51.2 – Địa chỉ của biếnKhái niệmKhi khai báo “int a = 15;”− Máy sẽ cấp phát cho biến a một khoảng nhớ gồm 2 bytes liên tiếp (kích thước kiểu int là 2 bytes).− Địa chỉ của biến là số thứ tự của byte đầu tiên được cấp cho biến. 61.2 – Địa chỉ của biếnPhân loại địa chỉ biến− Địa chỉ của hai biến kiểu int liên tiếp cách nhau 2 bytes.− Địa chỉ của hai biến kiểu float liên tiếp cách nhau 4 bytes. Địa chỉ kiểu int, địa chỉ kiểu float, địa chỉ kiểu double,... 71.2 – Địa chỉ của biếnPhép lấy địa chỉ của một biến− Toán tử một ngôi & cho ta địa chỉ của một đối tượng.− Phép toán & chỉ áp dụng cho các đối tượng trong bộ nhớ, đó là các biến và các phần tử mảng.− Toán tử & không áp dụng cho các biểu thức, các hằng và các biến có kiểu register (các biến này chứa trong thanh ghi của CPU). 82 – Con trỏ Khái niệm biến con trỏ Phân loại con trỏ Khai báo biến con trỏ Hằng con trỏ 92.1 – Khái niệm biến con trỏ Con trỏ là một loại biến dùng để lưu địa chỉ Mỗi loại địa chỉ sẽ có một kiểu con trỏ tương ứng (phụ thuộc vào loại dữ liệu lưu trữ trong địa chỉ đó) 102.2 – Phân loại con trỏ Tùy thuộc vào kiểu biến mà con trỏ trỏ đến, ta phân loại được các con trỏ. Con trỏ kiểu int chứa địa chỉ các biến kiểu int, con trỏ kiểu float chứa địa chỉ của các biến kiểu float,... 112.3 – Khai báo biến con trỏ Con trỏ không kiểu − Con trỏ không kiểu có thể chứa bất kỳ một địa chỉ nào. − Cú pháp: void *tên_biến_con_trỏ; − Ví dụ: void *p, *q; 122.3 – Khai báo biến con trỏ Con trỏ có kiểu − Con trỏ có kiểu chỉ chứa những địa chỉ của loại dữ liệu phù hợp với kiểu dữ liệu mà ta đã khai báo cho con trỏ. − Cú pháp: kiểu_dữ_liệu *tên_biến_con_trỏ; − Ví dụ: int *p, *q; float *x; 132.4 – Hằng con trỏ Đối với các biến, từ khóa const dùng để khai báo và khởi đầu giá trị cho các biến mà sau này giá trị của nó không được phép thay đổi bởi các lệnh trong chương trình. Chúng được gọi là các đối tượng hằng. Đối với con trỏ, từ khóa const được dùng để khai báo các đối số con trỏ mà trong thân hàm ta không được phép thay đổi giá trị các đối tượng được trỏ bởi các đối tượng này. 14 2.4 – Hằng con trỏVí dụ 1:#include void main(){ const int a = 10; a++; // sai, khong duoc thay doi bien const a printf(“
a = %d”, a);} 15 2.4 – Hằng con trỏVí dụ 2:void thu_nghiem(const int *stt){ *stt = *stt + 1; // Sai, khong duoc thay doi gia tri cua bien // dang duoc tro boi con tro stt} 163 – Quy tắc sử dụng con trỏ Tên con trỏ Các phép toán trên con trỏ Toán tử * 173.1 – Tên con trỏ Tên con trỏ được đặt theo quy tắc đặt tên định danh. Ví dụ: float a, *p, *q; p = &a; /* con trỏ p trỏ đến địa chỉ biến a */ q = p; /* con trỏ q trỏ đến địa chỉ mà con trỏ p đang trỏ đến*/ 183.2 - Các phép toán trên con trỏ Phép gán Phép tăng giảm địa chỉ Phép so sánh Toán tử * 19 3.2 - Các phép toán trên con trỏ Phép gán− Chỉ nên thực hiện phép gán cho các con trỏ cùng kiểu.− Ví dụ: int x = 1, *pi, *qi; pi = &x; qi = pi;− Kết quả các câu lệnh trên là con trỏ pi và qi đều trỏ đến địa chỉ của biến x. 20 ...