Tải bản đầy đủ (.ppt) (16 trang)

Bài giảng phương pháp lập trình chương 7

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (192.19 KB, 16 trang )

CHƯƠNG 7
KIỂU CON TRỎ
( POINTER )


Nội dung:
I.
Định nghĩa -Khai báo.
II.
Các thao tác trên biến con trỏ.
III.
Con trỏ và mảng.
IV.
Thông số hình thức kiểu con trỏ.
V.
Cấp phát động.


I. ĐỊNH NGHĨA – KHAI BÁO
- ĐN: Biến kiểu con trỏ là biến chứa địa chỉ của một
biến khác.
- Các loại biến con trỏ: Nếu biến con trỏ chứa:
địa biến nguyên ta gọi là con trỏ nguyên,
địa chỉ biến thực gọi là con trỏ thực,
địa chỉ biến ký tự gọi là con trỏ ký tự...
- Cú pháp khai báo:
tên_kiểu* tên_biến;
trong đó:
tên_kiểu là những kiểu đã được định nghĩa
ý nghĩa:
khai báo biến tên_biến là biến con trỏ tên_kiểu ,


dùng để chứa địa chỉ của biến có kiểu là tên_kiểu.


I. ĐỊNH NGHĨA – KHAI BÁO
Ví dụ:
int* pa;
float* pf;
char* s;
int* a[100];
int (*a)[100];


II. CÁC THAO TÁC:
1. Lấy địa chỉ của 1 biến: (address operator)
Sử dụng tóan tử &
Ví dụ:
int a=10;
int*pa;
pa=&a;


II. CÁC THAO TÁC:
2.Lấy dữ liệu tại địa chỉ:(indirection operator)
Sử dụng tóan tử *
Ví dụ:
int a=10;
int*pa;
pa=&a;
cout<< *pa;



II. CÁC THAO TÁC:
3.Cộng trừ con trỏ với số nguyên:
Khi cộng với 1, địa chỉ được tăng lên một
lượng bằng kích thước kiểu con trỏ.
Ví dụ 1:
int a=10;
int*pa=&a;
cout<pa++;
cout<

II. CÁC THAO TÁC:
Ví dụ 2:
int a[]={5,10,15,20,25};
int*pa=&a[0];
cout<<*pa;
pa++;
cout<<*pa;


II. CÁC THAO TÁC:
4.So sánh 2 con trỏ:
Giống so sánh 2 số nguyên.
Thường dùng khi 2 con trỏ cùng trỏ đến
phần tử của 1 mảng.


III. CON TRỎ VÀ MẢNG:

1. Truy xuất phần tử mảng thông qua biến
con trỏ:
Ví dụ:
int a[4];
int* p=&a[0];
a[0] tương đương với *(p+0)
a[1] tương đương với *(p+1)
a[2] tương đương với *(p+2)
a[3] tương đương với *(p+3)


III. CON TRỎ VÀ MẢNG:
2. Tên biến mảng là hằng con trỏ: có trị
bằng địa chỉ của phần tử đầu.
Ví dụ:

int a[4];
int i=2;
khi đó a[i] tương đương *(a+i)


III. CON TRỎ VÀ MẢNG:
3. Tên thông số hình thức mảng tương
đương biến con trỏ đối với hàm.
Ví dụ:
void nhap(int a[], int &n);
tương đương với
void nhap(int *a, int &n);



III. THAY ĐỔI THÔNG SỐ THỰC BẰNG
THÔNG SỐ HÌNH THỨC CON TRỎ:
Ví dụ:
void swap(int*pa, int* pb)
{
int tam;
tam=*pa;
*pa=*pb;
*pb=tam;
}


V. CẤP PHÁT ĐỘNG:
1. Khái niệm:
stack
heap
2. Toán tử new
Cú pháp:
biến_con_trỏ=new tên_kiểu[N];
Ý nghĩa: Cấp phát vùng nhớ đủ để lưu N biến
kiểu tên_kiểu. Mặc định N=1 (khi không có N).
3. Toán tử delete
Cú pháp:
delete biến_con_trỏ;
delete [] biến_con_trỏ;
Ý nghĩa: Thu hồi vùng nhớ đã cấp phát cho
biến_con_trỏ bằng new.


V. CẤP PHÁT ĐỘNG:

Ví dụ:
int * a;
a=new int;
int *p;
p=new int[100];
delete a;
delete [] p;


Ví dụ: Sử dụng mảng cấp phát động
void nhap(int* &a, int&n)
{ cout<<“so phan tu:”; cin >>n;
a=new int[n];
for(int i=0; icin>>a[i]; //hoặc cin>>*(a+i);
}
void xuat(int* a, int n)
{ for(int i=0; icout<}
void main()
{ int *a,n;
nhap(a,n);
xuat(a,n);
}



×