Tải bản đầy đủ (.pdf) (25 trang)

Chuyên đề: Con trỏ ppt

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 (201.69 KB, 25 trang )

Lê Thúy Ngọc
1
Con trỏ
Lê Thúy Ngọc
Lê Thúy Ngọc
2
Biến
 int a;
 a = 5;
Tên biến: a
KDL: int
Giá trị: giá trị rác
<14>
0101
000000000000
<18>
Lê Thúy Ngọc
3
Biến
 Mang tính định lượng: có thể cân, đong,
đo, đếm, so sánh, …
 VD:
int a = 5, b = 30;
if (a == b)
b = 15;
a = b;
Lê Thúy Ngọc
4
Biến con trỏ
1. Định nghĩa: là 1 biến dùng để chứa địa
chỉ của1 biến khác.


2. Có nhiều KDL => có nhiềukiểu con trỏ
3. Không mang tính định lượng
4. Mang tính chỉ mục
5. Kích thướccủabiến con trỏ là 2B (DOS)
và 4B (Win)
Lê Thúy Ngọc
5
Khai báo biến con trỏ
 <KDL> *<tên biến>;
 VD:
int *p; //p là biến con trỏ, trỏ tớikiểuint
char *q;
- q là 1 biến con trỏ
- q trỏ tới1 biếnkiểu char (q chứa địachỉ của1 biếnkiểu
char)
- q đượccấp phát vùng nhớ là 4B
Lê Thúy Ngọc
6
Địachỉ ô nhớ
 Bắt đầutừ 0
 Mỗiô nhớ có 1 địachỉ
 Các ô nhớ liên tiếp nhau sẽ có địachỉ liên
tiếp nhau.
<14>
<18>
<…> <15>
<0>
<16> <17>
<….>
Lê Thúy Ngọc

7
Toán tử &
 &<biếnthường>
 Cho địachỉ ô nhớ dành cho biến đikèm
 VD:
int m, *p;
&m: //cho địachỉ củabiếnm (địachỉ củabyte đầutiêncủabiến
m)
scanf(“%d”, &m); Å 5 //đặt vào ô nhớ có địachỉ là (&m) giá trị 5
p = &m; //p trỏđếnm (p chứa địachỉ củam)
scanf(“%d”, p); Å 5 //đặt5 vàoô nhớ có địachỉ là p
Lê Thúy Ngọc
8
Minh hoạ
125
<24><12>
p(m)
125
p(m)
Lê Thúy Ngọc
9
Ví dụ
1. int n, m, *p, *q, *s;
2. char c;
3. p = n;
4. p = &n;
5. q = p;
6. p = &m; =>q???
7. q = &p;
8. s = &c;

9. p = 10;
p trỏ tớin
q trỏ tớiô nhớ
mà p đang trỏ tới
Lê Thúy Ngọc
10
Toán tử *
 *<biến con trỏ>
 cho nội dung ô nhớ mà biến con trỏ trỏ tới
 VD:
int x, *px;
px = &x;
=> *px và x là tương đương trong mọingữ cảnh
Lê Thúy Ngọc
11
Ví dụ
x = 5;
int y = x;
if (x == z)
printf(“%d”,x);
scanf(“%d”,&x);
int *q; q = &x
*px = 5;
int y = *px
if (*px == z)
printf(“%d”, *px);
scanf(“%d”,px);
q = &(*px) <=>q =p;
Đặt5 vàoô nhớ mà
px trỏ tới

Đếnô nhớ mà px
trỏ tớilấynội dung
Khi biết địachỉ 1 biến
thì có thể làm thay đổi
giá trị củabiến
Lê Thúy Ngọc
12
Ví dụ
int n = 5, *p;
p = &n; printf(“%d”, *p);
=>output: 5
*p = n + *p; printf(“%d %d”,*p,n);
=>output: 10 10
n = 20; printf(“%d %d”,*p,n);
=>output: 20 20
Lê Thúy Ngọc
13
Ví dụ
m = 2
*p = 2
*q = 2
*q = n = 7
m = 2 + 7 = 9 =>*p = 9
n = 9 + 7 = 16=>*q = 16
*p = 9*16 = 144 =>m=144
int m, n, *p, *q;
m = 2;
p = &m;
q = p;
p = &n;

scanf(“%d”,p);Å7
m = *p + *q;
n = *p + *q;
*p = m*n;
printf(“%d %d %d
%d”,*p,*q,m,n);
Lê Thúy Ngọc
14
Ví dụ
int n, *p, *q;
p = q;
q = &n;
scanf(“%d”,q);
printf(“%d %d %d”, *p ,*q,n);
sử dụng biến con
trỏ không hợplý
không bao giờ
sử dụng biến con trỏ khi nóchưa
trỏđến vùng nhớ hợplệ
Lê Thúy Ngọc
15
phép toán số học trên con trỏ
int *p, m;
p = &m;
p = p + 5;
= <dc> + 5 *sizeof(int)
= 12 + 5*4
= 32
Lê Thúy Ngọc
16

Minh hoạ
125
<24><12>
p(m)
125
<36><32><28>
qp(m)
Lê Thúy Ngọc
17
Ví dụ
int *p, m[10] = {1,2,3,4,5,6,7,8,9,10};
p = &m;
printf("%d ",*p);
p = p + 5;
printf("%d ",*p);
=>Output: 1 6
Lê Thúy Ngọc
18
toán tử -
 Giữa 2 biến con trỏ chỉ tồn tại duy nhất
toán tử -
 hiệu của 2 biến con trỏ cho ra khoảng
cách giữa 2 ô nhớ mà 2 con trỏ trỏ tới
 q – p = (<36>-<24>)/sizeof(int)=3
Lê Thúy Ngọc
19
Ví dụ
int m,n,*p,*q;
p = &m;
q = &n;

printf(“%d”,p-q);
Lê Thúy Ngọc
20
Ví dụ
int a[10],*p,*q;
p = &a[2];
q = &a[5];
printf(“%d”,q-p);
=>Output: 3
Lê Thúy Ngọc
21
Con trỏ cấutrúc
struct PHANSO
{ int tu;
int mau;
};
PHANSO *ps1, *ps2, *ps3, ps4, ps5, ps[100]
con trỏ cấutrúcbiếncấutrúc
mảng cấutrúc
Lê Thúy Ngọc
22
Con trỏ cấutrúc
 ps1 = &ps4;
// gán địachỉ của ps4 cho ps1 (ps1 trỏđếnps4)
 ps2 = &ps[2];
//ps2 chứa địachỉ của ps[2] (ps2 trỏđếnps[2])
 ps3 = ps;
//ps2 chứa địachỉ ps (ps[0]) (ps2 trỏđếnô nhớ
chứa ps[0]/ ps2 trỏđếnps
Lê Thúy Ngọc

23
Truy cập thông qua con trỏ
 Có thể truy cập các thành phần thông qua
con trỏ theo 1 trong 2 cách:
 Tên_con_trỏ
Æ
tên_thành_phần
 (*Tên_con_trỏ) . tên_thành_phần
 sau khi thựchiện các phép gán ps1 =
&ps4; các cách viết sau là tương đương:
 ps1
Æ
tu và (*ps1).tu và ps4.tu
Lê Thúy Ngọc
24
Phép gán thông qua con trỏ
 *ps1
Ù
ps4
 *ps2
Ù
ps[2];
 *ps3
Ù
ps[0];
 ps4 = ps5; ps[2] = ps4;
Ù
*ps1 = ps5; *ps2 = *ps1;
Lê Thúy Ngọc
25

Phép cộng, trừđịachỉ
 ps2 = &ps[2] ;
 ps2 trỏ tớicácphầntử bấtkỳ khác
 ps2 = ps2 – 2 ; //ps2 sẽ trỏ tớips[0]
 ps2 = ps2 + 5; //ps2 sẽ trỏ tớips[7]

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×