Mời các bạn cùng tham khảo Bài giảng Tin học đại cương 2 - Chương 4: Mảng và con trỏ để nắm chi tiết nội dung kiến thức về mảng một chiều; mảng một chiều; mảng hai chiều; con trỏ và mảng; minh họa về con trỏ.
4.1 Mảng Mảng tập hợp hữu hạn phần tử có kiểu liệu Các phần tử mảng lưu trữ khối gồm nhớ liên tục nhau, có tên (cũng tên mảng) phân biệt với số Chỉ số xác định vị trí mảng Mảng Mảng chia làm loại: mảng chiều mảng nhiều chiều (mảng chiều trở lên) Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật 4.1.1 Mảng chiều A) Khai báo mảng: Kiểu_dữ_liệu Tên_mảng [số_phần_tử] ; Lưu ý: số_phần_tử ( kích thước mảng) phải xác định thời điểm khai báo phải số Ví dụ: int A[100]; //khai báo mảng số nguyên A gồm 100 phần tử Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật 4.1.1 Mảng chiều B) Truy xuất liệu mảng: Truy xuất phần tử mảng theo cú pháp: Tên_mảng[chỉ_số] Trong chỉ_số số nguyên đến n-1, với n kích thước mảng Ví dụ: Mảng A có phần tử, phần tử thứ A[1]= - Chỉ số Mảng A Phần tử A[0] -7 A[1] A[2] A[3] Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật 4.1.1 Mảng chiều C) Khởi tạo giá trị cho mảng chiều khai báo: Kiểu_dữ_liệu Tên_mảng[số_phần_tử] = { giá_tri_1, giá_trị_2,…}; Trong đó, giá_trị_1, giá_trị_2,… giá trị tương ứng khởi tạo cho phần tử mảng theo thứ tự Số lượng giá trị khơng vượt q kích thước mảng Ví dụ 1: Khởi tạo giá trị cho tất phần tử mảng: int A[5]={1,5,-8,7,0}; Ví dụ 2: Khởi tạo vài giá trị đầu mảng, phần tử sau mặc định 0: int A[5]={2,4,1}; Ví dụ 3: Khởi tạo giá trị cho tất phần tử: int A[5]={0}; Ví dụ 4: Khởi tạo mảng mà khơng khai báo kích thước: int A[]={1,5,-8}; Khi mảng A có kích thước có phần tử Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật 4.1.1 Mảng chiều D) Dùng mảng chiều làm tham số hàm: Việc truyền phần tử đơn lẻ vào hàm hoàn toàn giống với truyền biến vào hàm Đối với trường hợp muốn truyền toàn mảng cho hàm ta cần phải khai báo mảng tham số hình thước hàm Ví dụ: int Max(int A[12], kich_thuoc); Lưu ý: - Có thể khơng cần ghi kích thước mảng phần khai báo tham số hàm, ví dụ: int Max(int A[], kich_thuoc); ) - Khi gọi hàm truyền mảng ta ghi tên mảng mà khơng có cặp ngoặc [] ,ví dụ: Gọi hàm Max ví dụ trên, truyền tham số mảng int B[12] , kích_thước 12 sau: Max( B, 12) ; Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật Ví dụ: Dùng mảng chiều làm tham số hàm Kết chạy chương trình : - Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật 4.1.2 Mảng hai chiều Dạng đơn giản thông dụng mảng nhiều chiều mảng hai chiều Một mảng hai chiều mảng chứa mảng chiều Để cho dễ hiểu người ta thường biểu diễn mảng hai chiều dạng ma trận gồm hàng cột Tuy nhiên, mặt vật lý phần tử mảng hai chiều lưu khối nhớ liên tục A) Khai báo mảng hai chiều: Kiểu_dữ_liệu Tên_mảng[số_hàng][số_cột] ; Khi kích thước mảng tích (số_hàng*số_cột) Ví dụ: float A[3][4]; /*Mảng số thực A gồm 12 phần tử chia thành hàng, cột*/ Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật 4.1.2 Mảng hai chiều B) Truy xuất phần tử mảng: Mỗi phần tử mảng có dạng: Tên_mảng[chỉ_số_hàng][chỉ_số_cột] Trong đó, chỉ_số_hàng có giá trị từ đến (số_hàng -1)và chỉ_số_cột có giá trị từ đến (số_cột - 1) Ví dụ: Mảng int A[3][2] minh họa hình dưới: Chỉ số (0, 0) (0, 1) (1, 0) (1, 1) (2, 0) (2, 1) A[0][0] A[0][1] A[1][0] A[1][1] A[2][0] A[2][1] -9 Mảng A Phần tử Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật 4.1.2 Mảng hai chiều C) Khởi tạo giá trị cho mảng hai chiều khai báo: Thứ tự phần tử mảng A[i][j] khởi tạo theo thứ tự sau: … j-1 … i-1 Ví dụ 1: Khởi tạo mảng số nguyên A[3][2] giống mảng chiều: int A[3][2] = 2{2, 7, 9, 0, 4, -3}; -9 10 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật 4.2 Con trỏ A) Khái niệm Con trỏ biến lưu trữ địa biến khác Nghĩa là, giá trị trỏ địa ô nhớ nhớ Con trỏ thường sử dụng trường hợp: - Được sử dụng bên hàm để truy xuất đến giá trị biến nằm bên hàm - Truyền mảng chuỗi từ hàm đến hàm khác - Cần cấp phát vùng nhớ động giúp quản lí sử dụng nhớ cách hiệu - Xây dựng cấu trúc liệu cây, danh sách liên kết,… 14 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật 4.2 Con trỏ B) Khai báo sử dụng trỏ Cú pháp khai báo: Kiểu_dữ_liệu *Tên_con_trỏ ; Trong đó, Kiểu_dữ_liệu kiểu biến mà trỏ muốn trỏ đến Dấu ‘*’ kí hiệu trỏ áp dụng cho biến nằm sau Trước sử dụng trỏ phải rõ địa ô nhớ mà trỏ đến cách gán sau: Tên_con_trỏ = &tên_biến ; Với ‘&’ toán tử lấy địa biến đặt trước tên biến Ngoài ra, khởi tạo cho trỏ giá trị (hay NULL) Một trỏ có giá trị NULL khơng trỏ tới nhớ cả, khác với trỏ chưa khởi tạo 15 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật 4.2 Con trỏ Lưu ý: - Địa ô nhớ số nguyên không dấu, nên kiểu liệu biến trỏ kiểu số nguyên - Con trỏ sử dụng hai trường hợp: sử dụng giá trị trỏ sử dụng giá trị ô nhớ mà trỏ trỏ tới - Biến trỏ sử dụng biểu thức giống biến thông thường - Trong trường hợp muốn truy xuất đến giá trị ô nhớ mà trỏ trỏ tới, ta sử dụng toán tử ‘*’ đặt trước biến trỏ( trừ trường hợp trỏ có giá trị NULL để tránh lỗi chạy chương trình) 16 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật 4.2 Con trỏ C) Các phép toán số học trỏ C cho phép số phép toán số học thực trỏ gồm: +, -, ++, , +=, -= Bên cạnh phép toán số học, cịn thực phép so sánh hai trỏ như: ==, !=, >, >=,