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

Silde KIỂU CON TRỎ VÀ KIỂU CẤU TRÚC C++

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 (420.9 KB, 56 trang )

Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 1/56
CHƯƠNG 5: KIỂU CON TRỎ VÀ KIỂU
CẤU TRÚC

Mục tiêu

Giới thiệu các kiến thức về kiểu Con trỏ và kiểu Cấu
trúc: khái niệm, cách định nghĩa, khai báo biến con trỏ,
biến cấu trúc, cách truy xuất dữ liệu bằng con trỏ và
thao tác với từng thành phần của cấu trúc.
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 2/56
CHƯƠNG 5: KIỂU CON TRỎ VÀ KIỂU
CẤU TRÚC

Nội dung

Kiểu con trỏ

Kiểu cấu trúc

Cấu trúc tự trỏ

Mảng cấu trúc

Con trỏ và mảng

Mảng con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 3/56
-
Địa chỉ và phép toán &
-


Khai báo biến con trỏ
-
Các phép toán trên con trỏ
-
Cấp phát và giải phóng bộ nhớ
cho con trỏ
5.1 Kiểu Con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 4/56
- Địa chỉ Là một đại lượng dùng để định vị (xác định) vị trí
-
Đối tượng muốn xác định ở đây là các biến và các phần tử
(ô nhớ) chứa dữ liệu
-
Để xác định được địa chỉ của một đối tượng nào đó trong
C++, ta sử dụng phép toán một ngôi lấy địa chỉ là “&” theo
cú pháp:
&Đốitượng
\\ Dùng để xác định vị trí ô nhớ “Đốitượng”
Địa chỉ và phép toán &
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 5/56
Trường hợp, đối tượng là một biến, ta viết
&Tenbien \\Lấy địa chỉ của biến
Yêu cầu:
Xác định địa chỉ của đối tượng nếu là mảng, chuỗi
ký tự?
Địa chỉ và phép toán &
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 6/56
Ví dụ:
string st="hello";
float a[]={5.0,4.0,3.0,2.0,1.0};

int i;
char b[1]={'a'};
cout<<&st<<endl;
for (i=0; i<=4; i++)
cout<<&a[i]<<endl;
cout<<&a<<endl;
cout<<&b<<endl;
cout<<b[0]<<endl;
Địa chỉ và phép toán &
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 7/56
- Con trỏ là một biến chứa địa chỉ của biến khác.
-
Giả sử P là con trỏ chứa địa chỉ của biến x thì ta gọi p trỏ
tới x hay x được trỏ bởi p.
-
Thông qua con trỏ, ta có thể làm việc được với nội dung
của ô nhớ mà con trỏ trỏ đến.
Khai báo biến con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 8/56
- Cú pháp: kiểu_dữ_liệu *tên_biến_con_trỏ;
Trong đó:
- Kiểu_dữ_liệu là kiểu dữ liệu của ô nhớ mà ta muốn con
trỏ trỏ tới.
- Dấu (*) nhằm báo cho trình biên dịch biết đang làm việc
với kiểu dữ liệu là kiểu con trỏ
- tên_biến_con_trỏ cũng được đặt theo quy tắc đặt tên
=> Khai báo con trỏ có tên tên_biến_con_trỏ trỏ tới ô nhớ
chứa dữ liệu có kiểu_dữ_liệu
Khai báo biến con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 9/56

- Sử dụng con trỏ
Để con trỏ có tênbiếncontrỏ trỏ đến biến (ô nhớ) có
kiểudữliệu ta cần phải gán con trỏ tênbiếncontrỏ cho địa
chỉ của biến(ô nhớ) cần trỏ đến:
tênbiếncontrỏ = địa chỉ của ô nhớ (biến) cần trỏ tới
Lưu ý: Không thể gán một hằng địa chỉ cụ thể cho
biếncontrỏ
Để lấy nội dung ô nhớ mà con trỏ trỏ tới ta sử dụng phép
toán *.
Khai báo biến con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 10/56
Ví dụ:
float a[]={5.2, 4.3, 3.1, 2.25, 1.0};
int i=9, *q;
float *p, *p1;
p=a; p1=&a[3];
cout<<a<<endl;
cout<<p<<endl;
cout<<p1<<endl;
cout<<a[3]<<endl;
cout<<*p1<<endl;
cout<<*p<<endl;
cout<<*p+*p<<endl;
q=&i; cout<<q<<endl;
Khai báo biến con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 11/56
+ Phép gán:
- Gán con trỏ với địa chỉ một biến
- Gán các con trỏ với nhau (phải cùng kiểu)
Các phép toán trên con trỏ

Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 12/56
Ví dụ:
int i=9, j=4, *p, *q;
p=&i; q=&j;
cout<<p<<endl;
cout<<q<<endl;
cout<<*p<<endl;
cout<<*q<<endl;
p=q;
cout<<p<<endl;
cout<<q<<endl;
cout<<*p<<endl<<*q<<endl;
Các phép toán trên con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 13/56
+ Phép tăng giảm địa chỉ:
p+n: Con trỏ trỏ đến thành phần thứ n sau p
p-n: Con trỏ trỏ đến thành phần thứ n trước p
Một đơn vị tăng của con trỏ bằng kích thước của biến được
trỏ.
Chẳng hạn, biến có kiểu nguyên thì khi con trỏ tăng hay
giảm một đơn vị tương đương với 2 bytes
Các phép toán trên con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 14/56
Ví dụ:
int a[5]={1, 2, 3, 4, 5};
int *p, i;
p=a;
cout<<p<<endl<<endl;
cout<<*p<<endl<<endl;
for (i=0; i<5; i++)

{
cout<<p+i<<endl<<endl;
cout<<*(p+i)<<endl<<endl;
}
Các phép toán trên con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 15/56
+ Phép toán tự tăng, giảm: p++, p , ++p, p
+ Hiệu 2 con trỏ: p – q
+ Phép toán so sánh: <, <=, >, >=…
Các phép toán này thường áp dụng cho các con trỏ trỏ đến
các phần tử của cùng một mảng dữ liệu
Các phép toán trên con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 16/56
-
Cấp phát bộ nhớ: sử dụng toán tử new
+ Cấp phát tĩnh
+ Cấp phát động
Cú pháp:
p = new kieugiatri;
p = new kieugiatri[so_phan_tu]
Cấp phát và giải phóng bộ nhớ cho con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 17/56
-
Giải phóng bộ nhớ: sử dụng toán tử delete
Cú pháp:
delete p;
delete[] p;
Cấp phát và giải phóng bộ nhớ cho con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 18/56
Ví dụ:

int *p;
cout<<"Nhap mot so nguyen : ";
cin>>*p;
cout<<*p<<endl;
int *p;
cout<<"Nhap mot so nguyen : ";
p = new int;
cin>>*p;
cout<<*p<<endl;
Cấp phát và giải phóng bộ nhớ cho con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 19/56
Bài 1. Viết chương trình khai báo biến con trỏ kiểu nguyên.
Sau đó, nhập vào một dãy gồm 10 số nguyên. Hiển thị
dãy đó ra màn hình:
-
Theo thứ tự nhập vào
-
Theo thứ tự ngược lại
Bài 2. Sử dụng con trỏ để nhập vào một dãy gồm n số thực.
Sau đó:
-
Hiển thị dãy vừa nhập ra màn hình
-
Hiển thị dãy vừa nhập ra màn hình sau khi đã sắp xếp
Cấp phát và giải phóng bộ nhớ cho con trỏ
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 20/56
-
Kiểu cấu trúc là gì?
-
Làm thế nào để định nghĩa một cấu

trúc?
-
Cách khai báo biến cấu trúc?
-
Làm thế nào để làm việc với các thành
phần của cấu trúc?
5.2 Kiểu cấu trúc
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 21/56
-
Kiểu cấu trúc là kiểu dữ liệu bao gồm nhiều thành phần
có kiểu khác nhau, mỗi thành phần được gọi là một trường
(field)
-
Chẳng hạn, Sinh viên gồm nhiều trường: mã sinh viên, họ
tên, ngày tháng năm sinh, giới tính, quê quán, …
Khái niệm
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 22/56
- Xác định các kiểu dữ liệu đơn giản của các biến thành
phần được nhóm lại trong cấu trúc đó.
-
Cần chỉ ra: tên của cấu trúc và các thành phần của nó.
Phân biệt thành phần này với thành phần khác thông qua
kiểu dữ liệu, tên biến và kết thúc bằng dấu chấm phẩy (;).
Các thành phần của cấu trúc được đặt trong cặp dấu móc
nhọn ({}) và dùng dấu chấm phẩy (;) để kết thúc việc định
nghĩa một cấu trúc.
Định nghĩa cấu trúc
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 23/56
Cú pháp tổng quát để định nghĩa một kiểu cấu trúc như sau:
struct Tên_kiểu_cấu_trúc

{ /*Bắt đầu một cấu trúc*/
<Kiểudl> <Biến 1>;
<Kiểudl> <Biến 2>;
……
<Kiểudl> <Biến n>;
}; /*Kết thúc một cấu trúc
Định nghĩa cấu trúc
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 24/56
Ví dụ:
struct Ngaythang
{
unsigned int Ngay;
unsigned int Thang;
unsigned int Nam;
};
//struct lồng nhau
struct Sinhvien
{
char MSSV[10];
char Hoten[40];
struct Ngaythang Ngaysinh;
char Gioitinh[5];
char Diachi[40];
};
Định nghĩa cấu trúc
Ngôn ngữ Lập trình C++ Chương 5: Kiểu con trỏ và kiểu cấu trúc 25/56
Cú pháp khai báo biến kiểu cấu trúc:
Tên_kiểu_cấu_trúc <Biến 1>, <Biến 2>, …;
struct Ngaythang
{

unsigned int Ngay;
unsigned int Thang;
unsigned int Nam;
};
Ngaythang Ngay_den, Ngay_di
//Vừa định nghĩa vừa khai báo biến
struct Ngaythang
{
unsigned int Ngay;
unsigned int Thang;
unsigned int Nam;
}Ngay_den, Ngay_di;
Khai báo biến cấu trúc

×