Professional Documents
Culture Documents
c++ How to Programming Part 5 (đã dịch)
c++ How to Programming Part 5 (đã dịch)
• Con trỏ
– Mạnh, nhưng khó điều khiển
– Giả truyền theo tham chiếu
– Thắt chặt mối quan hệ với mảng và xâu
– Thông thường, biến chứa giá trị cụ thể (tham chiếu trực tiếp) 7
– Các con trỏ chứa địa chỉ của biến, có giá trị cụ thể(tham
chiếu gián tiếp) countPtr count
7
• Gián tiếp
– Tham chiếu giá trị thông qua con trỏ
• Khai báo con trỏ
– * chỉ ra biến là con trỏ
int *myPtr;
khai báo con trỏ kiểu int, kiểu của con trỏ là int *
– Nhiều con trỏ đòi hỏi nhiều dấu hoa thị *
int *myPtr1, *myPtr2;
y yptr y
5 500000 600000 600000 5
yPtr
fig05_04.cpp
The address of a is 0012FED4
(2 of 2)
The value of aPtr is 0012FED4
The value of a is 7
fig05_04.cpp
The value of *aPtr is 7 output (1 of 1)
• const pointers
– Luôn trỏ tới cùng vị trí nhớ
– Mặc định cho tên mảng
– Phải được khởi tạo khi khai báo
vPtr = 3000
v[0] v[1] v[2] v[3] v[4]
– vPtr += 2; trỏ vPtr tới 3008
vPtr trỏ tới v[ 2 ]
pointer variable vPtr
Pointer/offset notation
*(bPtr + 0) = 10
*(bPtr + 1) = 20
*(bPtr + 2) = 30
*(bPtr + 3) = 40
suit[1] ’D’ ’i’ ’a’ ’m’ ’o’ ’n’ ’d’ ’s’ ’\0’
bài
Cơ 0
Rô 1
Pích 2
Nhép 3
Clubs King
– Đặt 1-52 vào mảng để chỉ định trật tự các quân bài được chia
For each of the 52 cards For each slot of the deck array
Deal 52 cards
Find card number in deck array If slot contains card number
and print face and suit of card Print the face and suit of the
card
• Hằng ký tự
– Giá trị nguyên đại diện cho ký tự trong dấu nháy đơn ‘’
– 'z' là giá trị nguyên của z
• 122 trong ASCII
• Xâu
– Loạt ký tự được xem như 1 bộ đơn
– Có thể bao gồm các chữ cái, chữ số, ký tự đặc biệt +, -, * ...
– Xâu hằng
• Khép trong dấu nháy kép “”, ví dụ :
"I like C++"
– Mảng các ký tự, kết thúc với ký tự null '\0'
– Xâu là hằng con trỏ
• Trỏ tới ký tự đầu tiên của xâu
– Giống mảng
2003 Prentice Hall, Inc. All rights reserved.
64
5.12.1 Nguyên tắc cơ bản của ký tự và xâu
ký tự
• Gán xâu
– Ký tự mảng
• char color[] = "blue";
– Tạo mảng 5 phần tử kiểu char tên color
• Phần tử cuối cùng là '\0'
– Kiểu biến là char *
• char *colorPtr = "blue";
– Tạo con trỏ colorPtr trỏ tới chữ cái b trong xâu “blue”
• “blue” ở đâu đó trong bộ nhớ
– Tuỳ chọn cho mảng ký tự
• char color[] = { ‘b’, ‘l’, ‘u’, ‘e’, ‘\0’ };
char *strcat( char *s1, const Nối thêm dữ liệu xâu s2 vào xâu s1. Ký tự
char *s2 ); đầu tiên của xâu s2 viết đè lên ký tự null của
s1. Gía trị của s1 được trả về.
char *strncat( char *s1, const Nối thêm dữ liệu hầu hết n ký tự của xâu s2
char *s2, size_t n ); vào xâu s1. Ký tự đầu tiên của xâu s2 viết đè
lên ký tự null của s1. Gía trị của s1 được trả
về.
int strcmp( const char *s1, So sánh xâu s1 với xâu s2. Hàm trả về 1 giá
const char *s2 ); trị 0, nhỏ hơn 0 hoặc lớn hơn 0 nếu s1 bằng,
nhỏ hơn hoặc lớn hơn s2, theo thứ tự định sẵn.
char *strtok( char *s1, const char Một trình tự các lệnh gọi tới strtok ngắt
*s2 ); chuỗi s1 thành các “token”—các mảnh
logic như các từ trong một dòng văn bản —
được định ranh bởi các ký tự chứa trong xâu
s2. Lệnh gọi đầu tiên chứa s1 như đối số
thứ nhất, các các lệnh gọi tiếp theo tiếp tục
token cùng xâu chứa NULL như đối số thứ
nhất. Một con trỏ trỏ tới token hiện hành
được trả về theo mỗi lần gọi. Nếu không có
token nào nữa khi hàm được gọi, NULL
được trả về.
size_t strlen( const char *s ); Xác định chiều dài của xâu s. Số ký tự
đứng trước ký tự kết thúc null bị trả về.
s1 = Happy
s2 = New Year
strcmp(s1, s2) = 0
strcmp(s1, s3) = 1
strcmp(s3, s1) = -1
strncmp(s1, s3, 6) = 0
strncmp(s1, s3, 7) = 1
strncmp(s3, s1, 7) = -1
fig05_32.cpp
output (1 of 1)