Chuong 6_Con tro

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 20

LOGO

www.hcmute.edu.vn.com
LOGO

1 Địa chỉ và giá trị của biến

2 Con trỏ

3 Con trỏ trỏ tới mảng 1 chiều

4 Cấp phát bộ nhớ động cho con trỏ

www.hcmute.edu.vn.com
LOGO

1 Địa chỉ và giá trị của biến

 Biến:
 Giá trị của biến
 Địa chỉ của biến

www.hcmute.edu.vn.com
LOGO

1 Địa chỉ và giá trị của biến

 Toán tử địa chỉ: & lấy địa chỉ của biến

 Toán tử giá trị: * lấy giá trị tại địa chỉ chứa biến

www.hcmute.edu.vn.com
LOGO

1 Địa chỉ và giá trị của biến

 Ví dụ:
int a = 10;
printf("Gia tri cua a: %d", a);
printf("\nDia chi cua a: %p", &a);
_getch();

www.hcmute.edu.vn.com
LOGO

1 Địa chỉ và giá trị của biến

 Ví dụ:
int a = 10;
printf("Gia tri cua a: %d", a);
printf("\nDia chi cua a: %p", &a);
printf("\nGia tri (toan tu *) cua a: %d", *&a);
_getch();

www.hcmute.edu.vn.com
LOGO

2 Con trỏ

 Con trỏ (pointer)

 Là một biến
 Giá trị của nó là địa chỉ vùng nhớ

www.hcmute.edu.vn.com
LOGO

2 Con trỏ
 Khai báo biến con trỏ:
 Cú pháp 1:
tên kiểu dữ liệu* tên con trỏ;

Ví dụ:
int* p1; // Khai báo biến p1 kiểu int*

www.hcmute.edu.vn.com
LOGO

2 Con trỏ
 Khai báo biến con trỏ:
 Cú pháp 2:
tên kiểu dữ liệu *tên con trỏ;

Ví dụ:
int *p2; // Khai báo con trỏ p2 kiểu int

www.hcmute.edu.vn.com
LOGO

2 Con trỏ

 int *p1, p2, a, b;


 int *p1, *p2;
 int* p1, p2, a, b;

www.hcmute.edu.vn.com
LOGO

2 Con trỏ
 Sử dụng biến con trỏ:
 Bước 1: gán địa chỉ của vùng nhớ cho con trỏ

int a; //khai báo biến số nguyên a


int *p; // khai báo con trỏ p
p = &a; // gán địa của biến a cho con trỏ p

www.hcmute.edu.vn.com
LOGO

2 Con trỏ

 Ví dụ: p = a;
int a = 10; p = &a;
int *p; *p = *&a;
*a = *p;
*a = p;
*p = 10;
*p += 1;

www.hcmute.edu.vn.com
LOGO

2 Con trỏ
 Sử dụng biến con trỏ:
 Bước 2: truy xuất tới vùng nhớ con trỏ đang trỏ tới

int a; //khai báo biến số nguyên a


int *p; // Khai báo con trỏ p
p = &a; //gán địa của biến a cho con trỏ p
*p = 3; //tương đương với lệnh a = 3;

www.hcmute.edu.vn.com
LOGO

2 Con trỏ

 Kiểu con trỏ:

int *p;
char *c;
double *p;
float *p;

www.hcmute.edu.vn.com
LOGO

3 Con trỏ trỏ tới mảng 1 chiều

 Truy xuất tới từng phần tử của mảng:

 tên mảng[chỉ số]


 *(tên mảng + chỉ số)

Ví dụ:
 a[2];
*(a + 2);
www.hcmute.edu.vn.com
LOGO

3 Con trỏ trỏ tới mảng 1 chiều

Ví dụ:
int a[5]; //Khai báo mảng 1 chiều
int *p; // Khai báo con trỏ p kiểu số nguyên
p = a; // trỏ con trỏ p tới vùng nhớ của mảng a
*p = 8; // Tương đương a[0] = 8
*(p+1) = 7; // Tương đương a[1] = 7

www.hcmute.edu.vn.com
LOGO

4 Cấp phát bộ nhớ động cho con trỏ

 Thư viện: malloc.h


 Cú pháp:
tên con trỏ = (kiểu dữ liệu *) malloc (kích thước
vùng nhớ);

www.hcmute.edu.vn.com
LOGO

4 Cấp phát bộ nhớ động cho con trỏ

 Ví dụ:
int *a;
a = (int *)malloc(4); //xin cấp cho con trỏ a
vùng nhớ 4 byte

Nếu cấp phát không thành công sẽ trả về giá


trị NULL

www.hcmute.edu.vn.com
LOGO

5 Cấp phát bộ nhớ động cho con trỏ


 Giải phóng vùng nhớ

 Thư viện: malloc.h


 Cú pháp: free (tên biến con trỏ);

www.hcmute.edu.vn.com
LOGO

5 Cấp phát bộ nhớ động cho con trỏ


 Giải phóng vùng nhớ
 Ví dụ:
int *a;
a = (int *)malloc(4); //xin cấp cho a vùng
nhớ 4 byte
free (a); //giải phóng vùng nhớ đã cấp
cho con trỏ a

www.hcmute.edu.vn.com

You might also like