Bài giảng Ngôn ngữ lập trình: Mảng, con trỏ và mảnh động cung cấp cho người học những kiến thức như: Mảng-khái niệm, cách khai báo và sử dụng; Con trỏ-khái niệm, cách khai báo và sử dụng; Mảng động-khái niệm, cách khai báo và sử dụng. Mời các bạn cùng tham khảo!
NGƠN NGỮ LẬP TRÌNH Mảng, trỏ mảng động fit.hnue.edu.vn/~dungntp/NNLT 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN NỘI DUNG • Mảng: khái niệm, cách khai báo sử dụng • Con trỏ : khái niệm, cách khai báo sử dụng • Mảng động: khái niệm, cách khai báo sử dụng 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Mảng Mảng gì? • Mảng tập biến có kiểu đặt chung tên • Thường dùng để tránh khai báo nhiều biến đơn giản 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Khai báo mảng • Cú pháp: – kieucuamang tenmang[sophantu]; – kieucuamang tenmang[sophantu] = {các giá trị khởi tạo}; – kieucuamang tenmang[] = {các giá trị khởi tạo}; 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Khai báo mảng • Khai báo mảng cấp phát dải vùng nhớ, bao gồm địa liên tiếp – VD: int a[5]; // Khai báo phần tử kiểu int -> cấp phát dải vùng nhớ 5*2byte 30 37 90 Chỉ số Giá trị phần tử số phần tử mảng 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Khởi tạo mảng • Khởi tạo khai báo: int a[5] = {2,4,7,1,3}; – Nếu giá trị khởi tạo nhiều kích thước mảng báo lỗi – Nếu khơng đủ giá trị khởi tạo phần tử lại nhận giá trị – Nếu kích thước mảng khơng khai báo danh sách khởi tạo xác định kích thước mảng • int n[] = { 1, 2, 3, 4, }; => n có phần tử • Nếu khơng khởi tạo phần tử mảng nhận giá trị mặc định: int a[5]; 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Sử dụng mảng • Truy cập phần tử mảng thông qua số – VD: int a[5]; • a[0] = 3; • a[1] = 7; • … 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Sử dụng mảng • Chỉ số phần tử đánh số từ đến n-1 (với n tổng số phần tử mảng) • Nếu truy cập đến số ngồi vùng => n-1 thì: – Sẽ bị báo lỗi out of range – Hoặc không báo lỗi, ảnh hưởng đến biến khác nằm địa mà phần tử mảng chiếm giữ 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Mảng hàm • Một phần tử mảng làm đối số cho hàm – VD: int a[5], n; • Việc gọi fx(n) giống việc gọi fx(a[4]) 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 10 Sử dụng • Gán giá trị trỏ 06/03/2018 p1 10 a p2 10 b Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 37 Cấp phát vùng nhớ động cho trỏ • Sử dụng tốn tử new • Nếu việc cấp phát khơng thành cơng trỏ có giá trị NULL 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 38 Hủy vùng nhớ động cho trỏ • Sử dụng tốn tử delete • Sau gọi lệnh trên, trỏ trỏ tới vùng ô nhớ bị xóa 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 39 Hủy vùng nhớ động cho trỏ • Sử dụng tốn tử delete • Phải gán trỏ = NULL để đảm bảo trỏ không trỏ tới vùng nhớ bị xóa 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 40 Định nghĩa kiểu trỏ • Sử dụng từ khóa typedef • p sử dụng trỏ kiểu int • Tuy nhiên cách làm thường dễ gây nhầm lẫn 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 41 Mảng động Khái niệm • Mảng động mảng có kích thước khơng thời điểm lập trình • Kích thước mảng định chương trình chạy • Kích thước tăng thêm co lại cần -> tránh lãng phí nhớ 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 44 Tạo mảng động • • • • Sử dụng toán tử new Cấp phát biến trỏ Xử lý giống mảng tĩnh VD: – Double *p = new double[10]; // tạo mảng động kiểu double có 10 phần tử 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 45 Hủy mảng động • Do mảng động tạo chạy chương trình => phải hủy mảng động sau dùng xong • Sử dụng toán tử delete 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 46 Hủy mảng động • Chú ý cặp dấu [] sau từ khóa delete, việc xóa tồn nhớ cấp phát động, khơng có xóa nhớ 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 47 Truy cập đến phần tử mảng động Cách 1: Dùng số • Truy cập tới ô nhớ địa (p+i) cách viết p[i] 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 48 Truy cập đến phần tử mảng động Cách 2: Khơng dùng số • Dùng tốn tử * để truy cập đến ô nhớ địa p+i 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 49 Các phép tốn trỏ • Chỉ phép cộng trừ với trỏ • Khơng dùng phép tốn nhân, chia với trỏ • Có thể dùng tốn tử ++ trỏ 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 50 Bài tập Sử dụng trỏ Viết chương trình C++ nhập 10 giá trị nguyên, sau tìm giá trị lớn nhất, nhỏ nhất, tìm giá trị có tần suất xuất nhiều nhất, xếp mảng theo thứ tự tăng dần, giảm dần hiển thị kết 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 52 ... 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 27 Con trỏ 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 28 Con trỏ hoạt động nào? • Khởi tạo chương trình • Nếu khai báo: – biến trỏ. .. 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 38 Hủy vùng nhớ động cho trỏ • Sử dụng tốn tử delete • Sau gọi lệnh trên, trỏ trỏ tới vùng ô nhớ bị xóa 06/03/2018 Nguyễn Thị Phương Dung - Khoa... 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 35 Sử dụng • Gán giá trị cho vị trí trỏ trỏ tới p v = 10 • Tốn tử * dùng để khử tham chiếu 06/03/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN