1
Phm Đình Sc
dinhsac@gmail.com
Trư ng Cao đ ng K thu t Công ngh Đ ng Nai
Khoa Công ngh thông tin
NHP MÔN LP TRÌNH
CON TR ( CƠ B N)
VC
VC &
&
BB
BB
22
Nội dung
NMLT - Con trỏ cơ b n
Khái ni m và cách s d ng
1
Các cách truy n đ i s cho hàm
2
Con tr và m ng m t chi u
3
Con tr và c u trúc
4
VC
VC &
&
BB
BB
33
Khai báo con trỏ
Khai báo
Giố ng như mọ i biế n kc, biế n con trỏ mu n s
dụ ng cũng cầ n phả i đư c khai báo
dụ
ch1 ch2 biế n con trỏ , trỏ tớ i vùng nh ki u
char (1 byte).
p1 biế n con trỏ , trỏ tớ i vùng nhớ kiể u int (2
bytes) còn p2 là biế n kiể u int bình thư ng.
NMLT - Con trỏ cơ b n
<kiể u dữ liệ u> *<tên biế n con trỏ >;
char *ch1, *ch2;
int *p1, p2;
VC
VC &
&
BB
BB
44
Con trỏ NULL
Khái niệ m
Con trỏ NULL con trỏ không trỏ vào đâu c .
Khác vớ i con trỏ chư a đư c khở i tạ o.
NMLT - Con trỏ cơ b n
NULL
int n;
int *p1 = &n;
int *p2; // unreferenced local varialbe
int *p3 = NULL;
VC
VC &
&
BB
BB
55
Khi to kiu con tr
Kh i t o
Khi m i khai báo, biế n con tr đư c đ t đ a ch
nào đó (không biế t trư c).
ch a giá tr không xác đ nh
tr đế n vùng nh không biế t trư c.
Đ t đ a ch c a biế n vào con tr (toán t &)
Ví d
NMLT - Con tr cơ b n
<tên biế n con tr > = &<tên biế n>;
int a, b;
int *pa = &a, *pb;
pb = &b;
VC
VC &
&
BB
BB
66
S dng con tr
Truy xu t đế n ô nh mà con tr tr đế n
Con tr ch a m t s nguyên ch đ a ch .
Vùng nh mà nó tr đế n, s d ng toán t *.
Ví d
NMLT - Con tr cơ b n
int a = 5, *pa = &a;
printf(%d\n, pa); // Giá tr biế n pa
printf(%d\n, *pa); // Giá tr vùng nh pa tr đế n
printf(%d\n, &pa); // Đ a ch biế n pa
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
a pa
0B
0B 00
00 00
00 00
00
05
05 00
00 00
00 00
00
VC
VC &
&
BB
BB
77
Kích thước của con trỏ
Kích thư c củ a con trỏ
Con trỏ chỉ u đị a chỉ nên kích thư c củ a m i con
trỏ như nhau:
Môi trư ng MD-DOS (16 bit): 2bytes
Môi trư ng Windows (32 bit): 4bytes
NMLT - Con trỏ cơ b n
char *p1;
int *p2;
float *p3;
double *p4;
VC
VC &
&
BB
BB
88
Các cách truyền đối số
Truyề n giá trị (tham trị )
NMLT - Con trỏ cơ b n
#include <stdio.h>
void hoanvi(int x, int y);
void main()
{
int a = 5; b = 6;
hoanvi(a, b);
printf(“a = %d, b = %d”, a, b);
}
void hoanvi(int x,int y)
{
int t = x; x = y; y = t;
}
VC
VC &
&
BB
BB
99
Các cách truyền đối số
Truyề n tham chiế u
NMLT - Con trỏ cơ b n
#include <stdio.h>
void hoanvi(int &x, int &y);
void main()
{
int a = 5; b = 6;
hoanvi(a, b);
printf(“a = %d, b = %d”, a, b);
}
void hoanvi(int &x, int &y)
{
int t = x; x = y; y = t;
}
VC
VC &
&
BB
BB
1010
Các cách truyền đối số
Truyề n đị a chỉ (con trỏ )
NMLT - Con trỏ cơ b n
#include <stdio.h>
void hoanvi(int *x, int *y);
void main()
{
int a = 5; b = 6;
hoanvi(&a, &b);
printf(“a = %d, b = %d”, a, b);
}
void hoanvi(int *x, int *y)
{
int t = *x; *x = *y; *y = t;
}