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

Thông tin cơ bản

Định dạng
Số trang 28
Dung lượng 468,57 KB

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