
Bài thực hành số 9: Con trỏ
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
Bài thực hành số 9: Con trỏ Bài thực hành số 9: Con trỏ Mục tiêu A. Nắm vững định nghĩa biến con trỏ, các thao tác cơ bản trên con trỏ. Năm vững các mảng động, xâu động cài đặt bằng con trỏ Rèn luyện cách gọi hàm, truyền tham biến. Ôn tập: B. Các định nghĩa kiểu con trỏ Các thao tác cơ bản trên con trỏ Mảng động, xâu động cài đặt bằng con trỏ Truyền tham số. I. Biến cấu trỏ - Kiểu con trỏ: Cú pháp định nghĩa biến con trỏ: 1. KDL *ConTro; Định nghĩa kiểu con trỏ 2. typedef KDL *KieuConTro; II. Các phép toán trên con trỏ: Phép toán con trỏ “ * “: 1. *px : trả về nội dung của địa chỉ mà con trỏ px tới. Phép gán địa chỉ cho con trỏ cùng kiểu: 2. giả sử: int *px, x; px = &x; ( khi đó có: *px == x) Gán 2 con trỏ cùng kiểu. 3. Lưu ý: Mọi con trỏ đều có thể nhận giá trị NULL px = NULL; Cấp phát vùng nhớ cho biến con trỏ (để chứa dữ liệu) 4. px = new KDL; Giải phóng vùng nhớ cho biến con trỏ 5. delete px; III. Mảng động 1chiều (Cấp phát động cho mảng 1 chiều thông qua con trỏ) Dùng con trỏ để cài đặt mảng 1 chiều. 1 Khai báo : KDL *a; 2. Cấp phát vung nhớ : //Cấp phát cho mảng động a chứa đủ MAX phần tử kiểu KDL a = new KDL[MAX]; 3. Thu hồi vùng nhớ : delete []a; 4. Truy cập đến phần tử (địa chỉ, giá trị) trong mảng: Giá trị : a[i] *(a+i) Địa chỉ : &a[i] a+i IV. Mảng động 2 chiều (Ma trận) (Cấp phát động cho mảng 2 chiều thông qua con trỏ) 1. Khai báo : KDL *a; 2. Cấp phát vùng nhớ để lưu trử dữ liệu : a = new KDL[KT1*KT2]; // (a = new int[m*n];) 3. Thu hồi vùng nhớ. delete [ ]a; 4. Duyệt các phần tử của mảng : Để duyệt các phần tử của mảng, theo cách đã biết là dựa vào chỉ số của các phần tử của mảng( a[i][j]), ngoài ra có thể sử dụng con trỏ theo cách sau: a + i*n + j trỏ tới phần tử a[i][j] ( mảng m hàng, n cột) V. Xâu ký tự động 1. Khai báo : char *a; //wchar *a; TCHAR *a; 2. Khởi tạo : *a = NULL; 2. Cấp phát vùng nhớ: a = new char[MAX]; 3. Thu hồi vùng nhớ: delete [ ]a; 4. Truy cập đến phần tử (địa chỉ, giá trị) trong xâu: Giá trị : a[i] *(a+i) Địa chỉ : &a[i] a+i VI. Con trỏ cấu trúc: Xét kiểu cấu trúc: KCT 1. Khai báo : KCT *p; 2. Cấp phát vùng nhớ: p = new KCT 3. Thu hồi vùng nhớ: delete [ ]p; 4. Truy cập đến các trường dữ liệu của cấu trúc: Theo cú pháp: p -> Ten_Thanh_Phan Chẳng hạn với kiểu cấu trúc NHANVIEN (Lab8): p -> MaNV p -> Sdt VII. Mảng động cấu trúc Xét kiểu cấu trúc KCT 1. Khai báo : KCT *a; 2. Cấp phát vùng nhớ: a = new KCT[MAX]; 3. Thu hồi vùng nhớ: delete [ ]a; VIII. Truyền tham số 1. Một số điểm lưu ý: • Muốn hàm trả về một giá trị (Mảng, xâu) thì trả về một con trỏ. • Muốn tham số thực giữu lại thay đổi khi chương trình ra khỏi hàm thì phải dùng các truyền bằng biến (tức là đối phải dùng con trỏ hoặc tham chiếu). 2.Truyền tham số: Luyện tập: C. Ví dụ 1: Cho mảng a[0..n-1] có n số nguyên, x là số nguyên. Viết chương trình thực hiện chức năng sau: Chen(a,n,x,k) ≡ chèn x vào a tại vị trí thứ k, kết quả trả về a. (đếm k từ 0 ) Thực hiện: Bước 1: Tạo Project với tên “Lab9_Vd1”. Bước 2: Tạo tập tin chương trình vd1.cpp Bước 3: Trong tập tin vd1.cpp, soạn code theo cấu trúc: #include #define MAX 1000 using namespace std; void Nhap(int *a, int n); void Xuat(int *a, int n); void Chen(int *a, int &n, int x, int k); void main() { int a[MAX], n, x, k; coutn; Nhap(a,n); Xuat(a,n); coutx; do { cout Hàm main() có thể viết cách khác như sau: void main() { int *a, //Dùng con trỏ n, x, k; coutn; a = new int[n]; //cấp phát vùng nhớ đề a chứa đủ n giá trị kiểu int Nhap(a,n); Xuat(a,n); coutx; do { cout coutn; a = new int[n*n]; b = new int[n*n]; c = new int[n*n]; Nhap(a,n,'a'); Nhap(b,n,'b'); Tich_MT(a,b,c, n); Xuat(a,n,'a'); Xuat(b,n,'b'); Xuat(c,n,'c'); cout int i,j,k; for (i = 0; i < n; i++) for(j = 0; j < n; j++) { *(c+i*n+j) = 0; for(k = 0; k < n; k++) *(c+i*n+j) += *(a+i*n+k)* *(b+k*n+j); } } Lưu ý: Hàm main() có thể viết cách khác như sau: void main() { int a[MAX][MAX], b[MAX][MAX], c[MAX][MAX]; int ...
Tìm kiếm theo từ khóa liên quan:
giáo trình tin học cơ sở nhập môn lập trình con trỏ nâng cao Con trỏ cấp 2 mảng nhiều chiều Mảng con trỏ Con trỏ hàmTài liệu có liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 357 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 188 0 0 -
Giáo trình nhập môn lập trình - Phần 22
48 trang 143 0 0 -
Bài giảng Nhập môn lập trình - Chương 12: Quản lý bộ nhớ
23 trang 69 0 0 -
Giáo trình Tin học cơ sở: Phần 1
81 trang 56 0 0 -
Bài giảng Nhập môn lập trình: Bài 2 - Thuật toán
32 trang 42 0 0 -
Giáo trình Tin học cơ sở: Phần 2
93 trang 41 0 0 -
Giáo trình Tin học cơ sở (Trình độ: Cao đẳng) - Trường Cao đẳng nghề Xây dựng
107 trang 41 0 0 -
Nhập môn lập trình (Đặng Bình Phương) - Các khái niệm cơ bản về hệ điều hành
17 trang 39 0 0 -
Giáo trình Tin học cơ sở: Phần 1 - Trường ĐH Y tế Công cộng
71 trang 37 0 0 -
Câu hỏi bài tập nhập môn lập trình
11 trang 37 0 0 -
CÁC KHÁI NIỆM CƠ BẢN VỀ LẬP TRÌNH
21 trang 36 0 0 -
Bài giảng Nhập môn lập trình - Bài 3: Hệ điều hành
17 trang 35 0 0 -
Bài giảng Nhập môn lập trình - Bài 7: Câu lệnh điều kiện và rẽ nhánh
32 trang 33 0 0 -
Bài giảng Nhập môn lập trình - Bài 8: Mảng hai chiều
33 trang 32 0 0 -
Bài giảng Nhập môn lập trình: Chương 0 - Trường Đại học Ngoại ngữ - Tin học, TP.HCM
10 trang 32 0 0 -
Giáo trình đào tạo Visual Basic 6.0 - FPT Software Solution
261 trang 31 0 0 -
Bài giảng Nhập môn lập trình - Bài 5: Câu lệnh lặp
49 trang 31 0 0 -
Bài giảng Nhập môn lập trình: Chương 5 - Trường Đại học Ngoại ngữ - Tin học, TP.HCM
61 trang 31 0 0 -
Bài giảng Nhập môn lập trình - Bài 1: Các khái niệm cơ bản về lập trình
21 trang 31 0 0