Bài thực hành số 9: Con trỏ
Số trang: 12
Loại file: doc
Dung lượng: 237.50 KB
Lượt xem: 26
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
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ỏ...
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 ...
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àmGợi ý tài liệu 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 317 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 166 0 0 -
Giáo trình nhập môn lập trình - Phần 22
48 trang 138 0 0 -
Bài giảng Nhập môn lập trình - Chương 12: Quản lý bộ nhớ
23 trang 64 0 0 -
Giáo trình Tin học cơ sở: Phần 1
81 trang 50 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 37 0 0 -
Giáo trình Tin học cơ sở: Phần 2
93 trang 36 0 0 -
Bài giảng Nhập môn lập trình: Bài 2 - Thuật toán
32 trang 36 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 33 0 0 -
Câu hỏi bài tập nhập môn lập trình
11 trang 32 0 0