Bài giảng Kỹ thuật lập trình cơ bản (C++) - Chương 6 trang bị cho người học những hiểu biết về con trỏ và chuỗi. Thông qua chương này người học sẽ tìm hiểu một số nội dung cơ bản như: Địa chỉ và toán tử lấy địa chỉ, con trỏ, quy tắc sử dụng con trỏ, chuỗi ký tự, một số thao tác trên chuỗi ký tự,... Mời các bạn cùng tham khảo.
Trang 1GV: ThS TRẦN NGUYỄN ANH CHI
Trường Cao đẳng Công nghệ Thông Tin Khoa Công nghệ Thông Tin
TpHCM, 02/2011
CHƯƠNG 6 CON TRỎ và CHUỖI
PHẦN 1: CON TRỎ
Địa chỉ và toán tử lấy địa chỉ
2
Biến
Liên quan đến biến: tên biến, kiểu biến, giá trị của biến
Địa chỉ của biến là số thứ tự của byte đầu tiên trong dãy các byte mà bộ nhớ cấp phát
Để xem địa chỉ của biến, sử dụng toán tử lấy địa chỉ &
Ví dụ
int a = 5;
biến có tên a, thuộc kiểu int và có giá trị = 5
địa chỉ của biến a: &a
Trang 2Con trỏ
Khái niệm
Con trỏ là một biến dùng để chứa địa chỉ
Vì có nhiều kiểu biến chứa trong các loại địa chỉ khác nhau, nên có nhiều kiểu con trỏ khác nhau: kiểu int, kiểu float…
Phải khai báo biến con trỏ trước khi sử dụng
Cú pháp
<kiểu dữ liệu> *<tên con trỏ>;
4
Con trỏ (tt)
Khi đó, các câu lệnh sau sẽ có ý nghĩa:
px = &x; //gán địa chỉ của biến x cho con trỏ px
py = &y; //gán địa chỉ của biến y cho con trỏ py
pz = &z; //sai???
Ví dụ
int x, y, *px, *py, *pz;
float z;
//x, y là 2 biến số nguyên
//px, py, pz là 3 con trỏ kiểu số nguyên
//z là biến số thực
Trang 3Quy tắc sử dụng con trỏ
Sử dụng tên con trỏ
Con trỏ cũng là một biến, nên khi tên của con trỏ xuất hiện
ở đâu thì giá trị của nó cũng sẽ được sử dụng ở đó
Khi tên con trỏ ở bên trái của một toán tử gán, thì giá trị của biểu thức bên phải phải là một địa chỉ để gán cho con trỏ này
Ví dụ:
int a, b, *p, *q, *w;
p = &a; //gán địa chỉ của biến a cho con trỏ p
q = p; //gán giá trị của con trỏ p cho con trỏ q
w = b; //sai???
6
Quy tắc sử dụng con trỏ (tt)
Sử dụng dạng khai báo của con trỏ
Với các khai báo và phép gán:
int x, y, z, *px, *py;
px = &x; //gán địa chỉ của biến x cho con trỏ px
py = &y; //gán địa chỉ của biến y cho con trỏ py
Khi đó, cách viết x và *px tương đương nhau trong mọi ngữ cảnh
y = 3*x + z;
*py = 3*x + z;
*py = 3*(*px) + z;
Kết luận: khi biết được địa chỉ của một biến, không những
có thể sử dụng giá trị của nó, mà còn có thể gán cho nó một giá trị mới
Trang 4GV: ThS TRẦN NGUYỄN ANH CHI
Trường Cao đẳng Công nghệ Thông Tin Khoa Công nghệ Thông Tin
TpHCM, 02/2011
CHƯƠNG 6 CON TRỎ và CHUỖI
PHẦN 2: CHUỖI
8
Chuỗi ký tự
Khái niệm
Kiểu char chỉ chứa được một ký tự Để lưu trữ một chuỗi (nhiều ký tự) ta sử dụng mảng (một chiều) các ký tự
Chuỗi ký tự kết thúc bằng ký tự ‘\0’ (null)
Độ dài chuỗi = kích thước mảng – 1
Ví dụ
char hoten[30];//chua 29 ky tu
char mssv[15]; //chua 14 ký tu
Trang 5Chuỗi ký tự (tt)
Khai báo
Cách 1:
char <tên chuỗi>[<số ký tự tối đa>];
Ví dụ:
char hoten[30];//chua 29 ky tu char mssv[15]; //chua 14 ký tu
Cách 2:
char *<tên chuỗi>;
<tên chuỗi> = new char;
Ví dụ:
char *hoten;
hoten = new char;
10
Chuỗi ký tự (tt)
Khởi tạo
Độ dài cụ thể:
char s[12] = {„L‟,‟a‟,‟p‟,‟ „,‟t‟,‟r‟,‟i‟,‟n‟,‟h‟,‟\0‟}; char s[12] = “Lap trinh”; //tu dong them „\0‟
‘L’ ‘a’ ‘p’ ‘ ’ ‘t’ ‘r’ ‘i’ ‘n’ ‘h’ ‘\0’
Tự động xác định độ dài:
char s[] = {„L‟,‟a‟,‟p‟,‟ „,‟t‟,‟r‟,‟i‟,‟n‟,‟h‟,‟\0‟};
char s[] = “Lap trinh”; //tu dong them „\0‟
‘L’ ‘a’ ‘p’ ‘ ’ ‘t’ ‘r’ ‘i’ ‘n’ ‘h’ ‘\0’
Trang 6Chuỗi ký tự (tt)
Nhập / xuất chuỗi
Sử dụng cách nhập xuất thông thường: cin và cout
Chỉ nhận được các ký tự từ bàn phím cho đến khi nhận
ký tự khoảng trắng hay ký tự xuống dòng Chuỗi kết quả không bao gồm ký tự khoảng trắng hay xuống dòng
12
Chuỗi ký tự (tt)
Trang 7Chuỗi ký tự (tt)
Sử dụng hàm gets() và puts()
Nhận được trọn vẹn chuỗi nhập vào
14
Một số thao tác trên chuỗi ký tự
Lấy chiều dài chuỗi
int *strlen(char *s)
Trả về chiều dài của chuỗi
Trang 8Một số thao tác (tt)
Sao chép chuỗi
char *strcpy(char *dest, char *source)
Sao chép từ chuỗi source vào chuỗi dest
16
Một số thao tác (tt)
So sánh chuỗi (không phân biệt hoa/thường)
int *strcmp(char *s1, char *s2)
So sánh 2 chuỗi s1 và s2
Trang 9 Nối chuỗi
char *strcat(char *dest, char *source)
Nối chuỗi source vào chuỗi dest
Một số thao tác (tt)