Kỹ thuật lập trình<br />
Bài 7 – Kiểu con trỏ<br />
TS. Ngô Hữu Dũng<br />
<br />
181<br />
<br />
Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017<br />
<br />
Ngô Hữu Dũng<br />
<br />
Khái niệm con trỏ (pointer)<br />
Con trỏ là biến mà giá trị của nó là địa chỉ bộ nhớ<br />
Địa chỉ bộ nhớ?<br />
<br />
<br />
scanf(“%d”,&i);<br />
<br />
// &i là địa chỉ bộ nhớ của biến i<br />
<br />
Khai báo<br />
type * variable_name;<br />
Con trỏ lưu địa chỉ bộ nhớ<br />
<br />
<br />
<br />
<br />
<br />
<br />
182<br />
<br />
p = 0073FB60<br />
Biến<br />
<br />
i = 20<br />
<br />
Địa chỉ<br />
<br />
i<br />
0073FB60<br />
int i = 20;<br />
p<br />
0073FB54<br />
int * p; // Khai báo con trỏ p<br />
p = &i; // Con trỏ p được gán bằng địa chỉ của biến i<br />
Ta nói con trỏ p “trỏ vào” biến i<br />
Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017<br />
<br />
Ngô Hữu Dũng<br />
<br />
Giá trị<br />
20<br />
<br />
0073FB60<br />
<br />
Con trỏ và địa chỉ<br />
int x;<br />
// Biến số nguyên x<br />
// Con trỏ p kiểu số nguyên<br />
2. int *p;<br />
3. p = &x;<br />
// p trỏ vào x<br />
4. x = 20;<br />
5. printf("%d ", x);<br />
// Giá trị của x<br />
6. printf("%d ", *p);<br />
// Giá trị của x<br />
// Địa chỉ của x<br />
7. printf("%p ", &x);<br />
8. printf("%p ", p);<br />
// Địa chỉ của x<br />
9. *p = 40;<br />
10. printf("Gia tri: %d = %d" , *p, x);<br />
11. printf("Dia chi: %p = %p" , p, &x);<br />
1.<br />
<br />
183<br />
<br />
Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017<br />
<br />
Ngô Hữu Dũng<br />
<br />
Kiểu con trỏ<br />
<br />
<br />
Khai báo: Dùng dấu *<br />
<br />
<br />
<br />
<br />
Địa chỉ của biến mà con trỏ trỏ vào<br />
<br />
<br />
<br />
<br />
*p = x<br />
<br />
In ra màn hình địa chỉ: Dùng %p<br />
<br />
<br />
<br />
<br />
p = &x<br />
<br />
Giá trị của biến mà con trỏ trỏ vào: Dùng dấu *<br />
<br />
<br />
<br />
<br />
int *p;<br />
<br />
printf(“%p = %p”, p, &x);<br />
<br />
Chú ý: Phân biệt các dấu * và các dấu &<br />
184<br />
<br />
Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017<br />
<br />
Ngô Hữu Dũng<br />
<br />
Sử dụng con trỏ<br />
<br />
<br />
Chưa trỏ vào biến<br />
<br />
<br />
<br />
<br />
<br />
int *p;<br />
*p = 40; // Run-time error!<br />
<br />
Trỏ vào biến<br />
<br />
<br />
<br />
<br />
<br />
<br />
185<br />
<br />
int x, *p1, *p2;<br />
p1 = &x;<br />
// Trỏ p1 vào biến x<br />
*p1 = 40;<br />
// x = 40;<br />
p2 = p1;<br />
// gán trực tiếp, tương đương với p2 = &x;<br />
*p2 = 50;<br />
// x = 50;<br />
*p1 = 60;<br />
// x = 60;<br />
Kỹ thuật lập trình | DHTH11C | HK1 | 2016-2017<br />
<br />
Ngô Hữu Dũng<br />
<br />