Bài th c hành s 9:
Con tr
A. M c tiêu
N m v ng đ nh nghĩa bi n con tr , các thaoc c b n tn con tr . ế ơ
Năm v ng các m ng đ ng, u đ ngi đ t b ng con tr
Rèn luy n cách g i hàm, truy n tham bi n. ế
B. Ôn t p:
c đ nh nghĩa ki u con tr
c thao tác c b n trên con trơ
M ng đ ng, xâu đ ng i đ t b ng con tr
Truy n tham s .
I. Bi n c u tr - Ki u con tr :ế
1. Cú pháp đ nh nga bi n con tr : ế
KDL *ConTro;
2. Đ nh nghĩa ki u con tr
typedef KDL *KieuConTro;
II. Các phép toán trên con tr :
1. Phép tn con tr “ * “:
*px : tr v n i dung c a đ a ch mà con tr px t i.
2. Phép n đ a ch cho con tr ng ki u:
gi s :
int *px, x;
px = &x;
( khi đó có: *px == x)
3. Gán 2 con tr ng ki u.
L u ý: M i con tr đ u có th nh n g tr NULLư
px = NULL;
4. C p pt vùng nh cho bi n con tr ch a d li u) ế
px = new KDL;
5. Gi i pngng nh cho bi n con tr ế
delete px;
III. M ng đ ng 1chi u
(C p phát đ ng cho m ng 1 chi u thông qua con tr )
ng con tr đ i đ t m ng 1 chi u.
1 Khai o :
KDL *a;
2. C p pt 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: ế
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. Khaio :
KDL *a;
2. C p pt vùng nh đ l u tr d li u : ư
Giá tr :a[i] *(a+i)
Đ a ch : &a[i] a + i
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 ph n t c a m ng, theo cách đã bi t d a vào ch s c a các ế
ph n t c a m ng( a[i][j]), ngoài ra th s d ng con tr theoch 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. Khaio :
char *a;
//wchar *a; TCHAR *a;
2. Kh i t o :
*a = NULL;
2. C p pt 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: ế
VI. Con tr c u trúc:
t ki u c u trúc: KCT
1. Khaio :
KCT *p;
Giá tr :a[i] *(a+i)
Đ a ch : &a[i] a + i
2. C p pt 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:
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
t ki u c u trúc KCT
1. Khaio :
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 ươ
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 :
p -> Ten_Thanh_Phan
C. Luy n t p:
Ví d 1:
Cho mng a[0..n-1] có n s nguyên, x là s nguyên. Viết chương trình thc hin chc
năng sau:
Chen(a,n,x,k) chèn x vào a ti 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 <iostream>
#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()
{