1. Trang chủ
  2. » Công Nghệ Thông Tin

Ch07 pointer

28 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Slide 1 Trần Quang © 2016 Kỹ thuật lập trình 1 Chương 06 Con trỏ Chương 07 CON TRỎ Trần Quang © 2016 Kỹ thuật lập trình 2 Chương 06 Con trỏ Nội dung  Tổ chức bộ nhớ  Ứng dụng của con trỏ  Mô hình c[.]

Chương 07 CON TRỎ Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình Nội dung          Tổ chức nhớ  Ứng dụng trỏ Mơ hình trỏ  Toán tử & Khai báo trỏ Toán tử * Các phép toán Con trỏ mảng Cấp phát nhớ động Trần Quang © 2016 Con trỏ cấu trúc, toán tử -> Các chủ đề nâng cao với trỏ  Thứ tự đánh giá * ++, - Con trỏ const  Con trỏ đến trỏ  Con trỏ void Chương 06: Con trỏ Kỹ thuật lập trình Tổ chức nhớ thực thi  Tổ chức nhớ chương trình nạp vào để thực thi Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình Tổ chức nhớ thực thi Vùng TEXT  Chứa mã thực thi chương trình  Vùng đọc  Có thể dùng chung Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình Tổ chức nhớ thực thi Vùng DATA  Dữ liệu khởi tạo (initialized)  Dữ liệu không khởi tạo (uninitialzed) gồm:  Biến toàn cục  Biến tĩnh (static)  Hằng chuỗi (Nguồn: http://proprogramming.org/) Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình Tổ chức nhớ thực thi Vùng HEAP  Chứa nhớ xin cấp phát động người lập trình  Liên quan đến kiểu liệu trỏ chương (Nguồn: http://proprogramming.org/) http://chortle.ccsu.edu/) Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình Tổ chức nhớ thực thi Vùng STACK  Chứa biến khai báo chương trình  Thơng tin lần gọi hàm Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình Ứng dụng trỏ  Mảng C    Phải biết trước số lượng phần tử thời điểm viết chương trình Do đó, cần phải khai báo số lượng lớn ô nhớ để sẵn Tuy nhiên, thời điểm đó, chương trình sử dụng nhiều  lãng phí u cầu: dùng mảng với số lượng phần tử cần biết lúc chương trình chạy? => Dùng trỏ Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình Ứng dụng trỏ  Mảng C    Khi thêm vào xóa phần tử mảng, cần phải dịch phải trái nhiều phần tử  tốn nhiều thời gian Yêu cầu: Có cách tổ chức liệu giúp phép quản lý phần tử nói nhanh chóng Giải pháp:  Trần Quang © 2016 Sử dụng danh sách liên kết  dùng trỏ Chương 06: Con trỏ Kỹ thuật lập trình Mơ hình trỏ Biến a có địa 0x1234 FFFF 0x1234 FFFF Biến p trỏ chứa địa biến a Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình 10 Tốn tử *   Tốn tử * lấy giá trị (tham khảo) địa Ví dụ: int a = 100; int *p; p = &a; printf("a : %d\n", a); printf("&a : %p\n", &a); printf("p : %p\n", p); printf("*p : %d\n", *p); printf("*&a: %d\n", *&a); Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình 14 Các phép tốn trỏ     Tăng, giảm: ++, -Cộng, trừ: +, Cộng, trừ kết hợp gán: +=, -= So sánh: ==, != Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình 15 Các phép tốn trỏ    Gọi p trỏ có kiểu T; Các phép cộng, trừ: làm trỏ p tăng hay giảm bội số kích thước kiểu T Ví dụ: int a = 100; int *p = &a; printf("p : %p\n", p); p++; printf("p : %p\n", p); Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình 16 Con trỏ mảng Con trỏ mảng có nhiều điểm giống Cả giữ địa ô nhớ  Con trỏ: giữ địa nhớ  Mảng: giữ địa phần tử Do đó:  Có thể gán mảng vào trỏ  Nhưng gán trỏ vào mảng  Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình 17 Con trỏ mảng  Ví dụ: Gán mảng vào trỏ  a p giữ địa địa int a[5]; phần tử mảng int *p = a; printf ("a =%p\n", a); printf ("p =%p\n", p); Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình 18 Con trỏ mảng  Con trỏ mảng có cách truy cập ô nhớ   Dùng toán tử [ ] Dùng toán tử * + int a[5]; int *p = a; int id = 2; a[id] = 100; p[id] = 100; Giống *(a + id) = 100; *(p + id) = 100; Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình 19 Con trỏ mảng Con trỏ mảng có điểm khác nhau:  Mảng: phần tử mảng nằm STACK  Con trỏ: Các phần tử mảng trỏ đến STACK hay HEAP Trần Quang © 2016 Chương 06: Con trỏ Kỹ thuật lập trình 20

Ngày đăng: 08/04/2023, 18:53