Danh mục

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    
tailieu_vip

Phí tải xuống: 4,000 VND Tải xuống file đầy đủ (12 trang) 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 ...

Tài liệu được xem nhiều: