Thứ Hai, 24 tháng 2, 2014

Tài liệu Ngôn ngữ lập trình C++ Chương 5 – Con trỏ và Xâu ký tự ppt

© 2004 Trần Minh Châu. FOTECH. VNU
5
Chương 5.
5.3 Các thao tác đối với con trỏ
• & Toán tử địa chỉ (address operator)
–Trả về địa chỉ vùng nhớ của toán hạng
–Ví dụ
int y = 5;
int *yPtr;
yPtr = &y; // yPtr chứa địa chỉ củay
– yPtr “trỏ đến” y
yPtr
y
5
yptr
12FEA8 12FED4
y
12FED4
5
địa chỉ của y là
giá trị của yptr
© 2004 Trần Minh Châu. FOTECH. VNU
6
Chương 5.
5.3 Các thao tác đối với con trỏ
• * phép thâm nhập (indirection/dereferencing)
–Trả về đối tượng mà con trỏ trỏ tới
– *yPtr trả về y (vì yPtr trỏ đến y).
–con trỏ khi bị thâm nhập (dereferenced) là giá trị trái (lvalue)
*yptr = 9; // assigns 9 to y
• * và & ngược nhau
©2004 Trần Minh Châu.
FOTECH. VNU.
7
fig05_04.cpp
(1 of 2)
1 // Fig. 5.4: fig05_04.cpp
2 // Using the & and * operators.
3 #include <iostream>
4
5 using std::cout;
6 using std::endl;
7
8 int main()
9 {
10 int a; // a is an integer
11 int *aPtr; // aPtr is a pointer to an integer
12
13 a = 7;
14 aPtr = &a; // aPtr assigned address of a
15
16 cout << "The address of a is " << &a
17 << "\nThe value of aPtr is " << aPtr;
18
19 cout << "\n\nThe value of a is " << a
20 << "\nThe value of *aPtr is " << *aPtr;
21
22 cout << "\n\nShowing that * and & are inverses of "
23 << "each other.\n&*aPtr = " << &*aPtr
24 << "\n*&aPtr = " << *&aPtr << endl;
25
* và & ngược nhau
©2004 Trần Minh Châu.
FOTECH. VNU.
8
fig05_04.cpp
(2 of 2)
fig05_04.cpp
output (1 of 1)
26 return 0; // indicates successful termination
27
28 } // end main
The address of a is 0012FED4
The value of aPtr is 0012FED4
The value of a is 7
The value of *aPtr is 7
Showing that * and & are inverses of each other.
&*aPtr = 0012FED4
*&aPtr = 0012FED4
* và & ngược nhau; cùng kết quả khi
cùng sử dụng cả 2 với aPtr
© 2004 Trần Minh Châu. FOTECH. VNU
9
Chương 5.
5.4 Gọi hàm bằng tham chiếu
• 3 cách truyền tham số cho hàm
–Truyền giá trị (Pass-by-value)
–Truy
ền tham chiếu với đối số là tham chiếu (Pass-by-
reference with reference arguments)
–Truy
ền tham chiếu với đối số là con trỏ (Pass-by-reference with
pointer arguments)
© 2004 Trần Minh Châu. FOTECH. VNU
10
Chương 5.
5.4 Gọi hàm bằng tham chiếu
•Truyền tham chiếu với đối số là tham chiếu
– Thay đổi giá trị gốc của tham số
– hàm có thể “trả về” nhiều hơn một giá trị
•Truyền tham chiếu bằng đối số là con trỏ
–Tương tự pass-by-reference
•Sử dụng con trỏ và toán tử *
–Truyền địa chỉ của đối số bằng toán tử &
–Truyền mảng không cần toán tử
& vì tên mảng chính là con trỏ
– Toán tử thâm nhập
* được dùng cùng con trỏ để tạo một tên khác cho
biến được truyền vào
©2004 Trần Minh Châu.
FOTECH. VNU.
11
fig05_06.cpp
(1 of 2)
1 // Fig. 5.6: fig05_06.cpp
2 // Cube a variable using pass-by-value.
3 #include <iostream>
4
5 using std::cout;
6 using std::endl;
7
8 int cubeByValue( int ); // prototype
9
10 int main()
11 {
12 int number = 5;
13
14 cout << "The original value of number is " << number;
15
16 // pass number by value to cubeByValue
17 number = cubeByValue( number );
18
19 cout << "\nThe new value of number is " << number << endl;
20
21 return 0; // indicates successful termination
22
23 } // end main
24
Truyền number bằng giá trị;
kết quả được trả về bởi
cubeByValue
©2004 Trần Minh Châu.
FOTECH. VNU.
12
fig05_06.cpp
(2 of 2)
fig05_06.cpp
output (1 of 1)
25 // calculate and return cube of integer argument
26 int cubeByValue( int n )
27 {
28 return n * n * n; // cube local variable n and return result
29
30 } // end function cubeByValue
The original value of number is 5
The new value of number is 125
cubeByValue nhận tham
số passed-by-value
Tính lập phương và trả về biến
địa phương (local variable) n
©2004 Trần Minh Châu.
FOTECH. VNU.
13
fig05_07.cpp
(1 of 2)
1 // Fig. 5.7: fig05_07.cpp
2 // Cube a variable using pass-by-reference
3 // with a pointer argument.
4 #include <iostream>
5
6 using std::cout;
7 using std::endl;
8
9 void cubeByReference( int * ); // prototype
10
11 int main()
12 {
13 int number = 5;
14
15 cout << "The original value of number is " << number;
16
17 // pass address of number to cubeByReference
18 cubeByReference( &number );
19
20 cout << "\nThe new value of number is " << number << endl;
21
22 return 0; // indicates successful termination
23
24 } // end main
25
Dùng toán tử địa chỉ & để
truyền địa chỉ của number tới
cubeByReference
cubeByReference
thay đổi biến number
Prototype cho biết tham số là
con trỏ trỏ đến dữ liệu kiểu int
©2004 Trần Minh Châu.
FOTECH. VNU.
14
fig05_07.cpp
(2 of 2)
fig05_07.cpp
output (1 of 1)
26 // calculate cube of *nPtr; modifies variable number in main
27 void cubeByReference( int *nPtr )
28 {
29 *nPtr = *nPtr * *nPtr * *nPtr; // cube *nPtr
30
31 } // end function cubeByReference
The original value of number is 5
The new value of number is 125
cubeByReference nhận địa chỉ
của biến kiểu int,
tức là con trỏ trỏ đến một số int
Thay đổi và truy nhập biến
kiểu int sử dụng toán tử
thâm nhập *

Không có nhận xét nào:

Đăng nhận xét