1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Kỹ thuật lập trình C: Bài 7 - Hoàng Quốc Tuấn

43 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 43
Dung lượng 303,13 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Kỹ thuật lập trình C: Bài 7 Con trỏ và cấp phát bộ nhớ động, cung cấp cho người học những kiến thức như: Con trỏ và địa chỉ; Cấp phát và giải phóng bộ nhớ động. Mời các bạn cùng tham khảo!

Trang 1

KỸ THUẬT LẬP TRÌNH C

BÀI 7: CON TRỎ VÀ CẤP PHÁT BỘ NHỚ ĐỘNG

Hoàng Quốc Tuấn tuanhq@fpt.edu.vn http://hoangquoctuanpro.wordpress.com

Hoàng Quốc Tuấn tuanhq@fpt.edu.vn http://hoangquoctuanpro.wordpress.com

Trang 3

I – Con trỏ và địa chỉ

1 Toán tử địa chỉ

2 Con trỏ

3 Quy tắc sử dụng con trỏ

Trang 4

1 – Toán tử địa chỉ

Các khái niệm liên quan đến biến

Địa chỉ của biến

Khái niệm

Phân loại địa chỉ biến

Phép lấy địa chỉ của một biến

Trang 5

1.1 – Các khái niệm liên quan đến biến

Liên quan đến biến có ba khái niệm:

Trang 6

1.2 – Địa chỉ của biến

Khái niệm

Khi khai báo “int a = 15 ;”

− Máy sẽ cấp phát cho biến a một khoảng nhớ

gồm 2 bytes liên tiếp (kích thước kiểu int là 2

bytes)

− Địa chỉ của biến là số thứ tự của byte đầu tiên

được cấp cho biến

Trang 7

1.2 – Địa chỉ của biến

Phân loại địa chỉ biến

− Địa chỉ của hai biến kiểu int liên tiếp cách

Trang 8

1.2 – Địa chỉ của biến

Phép lấy địa chỉ của một biến

− Toán tử một ngôi & cho ta địa chỉ của một

đối tượng.

− Phép toán & chỉ áp dụng cho các đối tượng

trong bộ nhớ, đó là các biến và các phần tử

mảng

− Toán tử & không áp dụng cho các biểu

thức, các hằng và các biến có kiểu register

Trang 9

2 – Con trỏ

Khái niệm biến con trỏ

Phân loại con trỏ

Khai báo biến con trỏ

Hằng con trỏ

Trang 10

2.1 – Khái niệm biến con trỏ

Con trỏ là một loại biến dùng để lưu

địa chỉ

Mỗi loại địa chỉ sẽ có một kiểu con trỏ

tương ứng (phụ thuộc vào loại dữ liệu

lưu trữ trong địa chỉ đó)

Trang 11

2.2 – Phân loại con trỏ

Tùy thuộc vào kiểu biến mà con trỏ trỏ

đến, ta phân loại được các con trỏ.

Con trỏ kiểu int chứa địa chỉ các biến

kiểu int, con trỏ kiểu float chứa địa chỉ

của các biến kiểu float,

Trang 12

2.3 – Khai báo biến con trỏ

Con trỏ không kiểu

− Con trỏ không kiểu có thể chứa bất kỳ

Trang 13

2.3 – Khai báo biến con trỏ

Con trỏ có kiểu

− Con trỏ có kiểu chỉ chứa những địa chỉ

của loại dữ liệu phù hợp với kiểu dữ liệu

mà ta đã khai báo cho con trỏ.

Trang 14

2.4 – Hằng con trỏ

Đối với các biến, từ khóa const dùng để khai báo

và khởi đầu giá trị cho các biến mà sau này giá trị của nó không được phép thay đổi bởi các

lệnh trong chương trình Chúng được gọi là các

đối tượng hằng

Đối với con trỏ, từ khóa const được dùng để khai

báo các đối số con trỏ mà trong thân hàm ta

không được phép thay đổi giá trị các đối tượng được trỏ bởi các đối tượng này.

Trang 16

// Sai, khong duoc thay doi gia tri cua bien

}

Trang 17

3 – Quy tắc sử dụng con trỏ

Tên con trỏ

Các phép toán trên con trỏ

Toán tử *

Trang 19

3.2 - Các phép toán trên con trỏ

Phép gán

Phép tăng giảm địa chỉ

Phép so sánh

Toán tử *

Trang 20

3.2 - Các phép toán trên con trỏ

Trang 21

3.2 - Các phép toán trên con trỏ

Phép tăng giảm địa chỉ

Trang 22

3.2 - Các phép toán trên con trỏ

Phép so sánh

C cho phép so sánh các con trỏ cùng kiểu.

− Nếu p1 và p2 là hai con trỏ thì:

p1 < p2 nếu địa chỉ p1 trỏ tới thấp hơn địa chỉ p2

Trang 23

3.2 - Các phép toán trên con trỏ

int * pi ; // khai báo con trỏ

pi = & x ; // con trỏ pi trỏ đến biến x

y = * pi ; // y gán bằng giá trị của x

* pi = 0 ; // gán x bằng 0;

pi = & z [ 10 ]; // pi trỏ đến biến z[10]

Trang 24

II – Cấp phát bộ nhớ động

Khái niệm biến động

Cấp phát và giải phóng bộ nhớ động

Trang 25

1 – Khái niệm biến động

Biến động là các biến được tạo ra lúc

chạy chương trình, tùy theo nhu cầu mà

ta cấp phát bộ nhớ cho nó.

Các biến động không có tên (vì việc đặt

tên là gán cho nó một địa chỉ xác định).

Trang 26

1 – Khái niệm biến động

Việc tạo ra biến động và xóa nó đi được thực hiện nhờ các hàm malloc() và free()

của thư viện stdlib.h hoặc alloc.h

Việc truy cập đến biến động được thực

hiện nhờ vào các biến con trỏ

Trang 27

1 – Khái niệm biến động

Ví dụ:

int *p; // khai báo con trỏ

p = (int*) malloc(100);

//tạo biến động

Đoạn chương trình này cấp phát 100 bytes

trong bộ nhớ và gán địa chỉ khối bộ nhớ này

cho con trỏ p 100 bytes này được dùng lưu

trữ 50 số nguyên

Trang 28

1 – Khái niệm biến động

Ví dụ:

int * p ; // khai báo con trỏ

p = (int*) malloc( 80 * sizeof(int));

//tạo biến động

Đoạn chương trình này cấp phát bộ nhớ và gán

địa chỉ khối bộ nhớ này cho con trỏ p Khối vùng

nhớ này lưu trữ dược 80 số int.

Hàm sizeof ( kiểu ) trả về kích thước (byte) của kiểu

dữ liệu đối số

Trang 29

1 – Khái niệm biến động

Ví dụ:

char * cp ; // khai báo con trỏ

cp = (char*) malloc( 75 * sizeof(char));

//tạo biến động

Đoạn chương trình này cấp phát bộ nhớ và gán

địa chỉ khối bộ nhớ này cho con trỏ cp Khối vùng

nhớ này lưu trữ dược 75 ký tự.

Trang 32

printf( “khong du bo nho” );

exit( 1 );

}

printf( “Da cap bo nho” );

Trang 33

Kiểu datatype có thể là những kiểu dữ liệu mới

do người lập trình tạo ra

Trang 34

unsigned int tuoi;

unsigned int diem;

Trang 36

2.4 – Giải phóng bộ nhớ bằng free

Cú pháp:

void free (void *prt)

Chức năng: giải phóng vùng nhớ được trỏ

bởi con trỏ ptr Nếu prt = NULL thì free

không làm gì cả.

Trang 37

printf ( “Nhap so phan tu: ” );

Trang 39

2.5 – Các ví dụ

Ví dụ 1: Dùng hàm malloc cấp phát bộ nhớ cho một chuỗi ký tự.

Ví dụ 2: Dùng hàm calloc cấp phát bộ nhớ cho một chuỗi ký tự.

Ví dụ 3: Dùng hàm realloc cấp phát lại bộ nhớ cho một chuỗi ký tự.

Trang 40

printf ( “Chuoi ky tu la: %s” , str );

Ví dụ 1: Dùng hàm malloc cấp phát bộ nhớ cho một chuỗi ký tự.

Trang 43

Hỏi - Đáp

Hoàng Quốc Tuấn tuanhq@fpt.edu.vn http://hoangquoctuanpro.wordpress.com

Hoàng Quốc Tuấn tuanhq@fpt.edu.vn http://hoangquoctuanpro.wordpress.com

BÀI 7: CON TRỎ VÀ CẤP PHÁT BỘ NHỚ ĐỘNG

Ngày đăng: 23/02/2022, 10:23

🧩 Sản phẩm bạn có thể quan tâm