Thông số hình thức kiểu con trỏ.. - Đ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
Trang 1CHƯƠNG 7
KIỂU CON TRỎ ( POINTER )
Trang 2Nộ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
Trang 3- Đ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
Trang 4Ví dụ:
int* pa;
float* pf;
char* s;
int* a[100];
int (*a)[100];
I ĐỊNH NGHĨA – KHAI BÁO
Trang 51 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:
Trang 62.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:
Trang 73.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; // 0xFFF4
pa++;
cout<<pa; // 0xFFF6
II CÁC THAO TÁC:
Trang 8Ví dụ 2:
int a[]={5,10,15,20,25}; int*pa=&a[0];
cout<<*pa;
pa++;
cout<<*pa;
II CÁC THAO TÁC:
Trang 94.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
II CÁC THAO TÁC:
Trang 101 Truy xuất phần tử mảng thông qua biến
con trỏ:
Ví dụ: int a[4];
int* p=&a[0];
III CON TRỎ VÀ MẢNG:
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)
Trang 112 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:
Trang 123 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 CON TRỎ VÀ MẢNG:
Trang 13Ví dụ:
void swap(int*pa, int* pb)
{
int tam;
tam=*pa;
*pa=*pb;
*pb=tam;
}
III THAY ĐỔI THÔNG SỐ THỰC BẰNG
THÔNG SỐ HÌNH THỨC CON TRỎ:
Trang 141 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
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:
Trang 15Ví dụ:
int * a;
a=new int;
int *p;
p=new int[100];
delete a;
delete [] p;
V CẤP PHÁT ĐỘNG:
Trang 16void nhap(int* &a, int&n)
a=new int[n];
for(int i=0; i<n; i++)
cin>>a[i]; //hoặc cin>>*(a+i);
}
void xuat(int* a, int n)
{ for(int i=0; i<n; i++)
cout<<setw(4)<<a[i]; //hoặc cout<<*(a+i);
}
void main()
nhap(a,n);
xuat(a,n);
}
Ví dụ: Sử dụng mảng cấp phát động