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

Một phần của tài liệu Bài giảng kỹ thuật lập trình chương 1 Pointer (Trang 45 - 49)

▪ Có thể chỉ định vùng mới cho 1 con trỏ quản lý bằng các lệnh hàm malloc, calloc

(của C) hoặc toán tử new (của C++)

▪ Vùng nhớ do lập trình viên chỉ định phải được giải phóng bằng hàm free (của C) hoặc toán tử delete (của C++))

Ví dụ: int *i = new int;

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

▪ Hàm malloc (memory allocation) và calloc (contiguous allocation) cho phép cấp phát các vùng nhớ ngay trong lúc chạy chương trình.

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

▪ Toán tử sizeof: nhận một tham số là bất kỳ kiểu dữ liệu nào và trả về kích cỡ của kiểu dữ liệu đó. ▪ Ví dụ: cout<< sizeof(char); // 1 cout<< sizeof(int); // 4 cout<< sizeof(float); // 4 cout<< sizeof(double); // 8

trả về kích cỡ của cáckiểu dữ liệutrong C

trả về kích cỡ của các con trỏ tớicáckiểu dữ liệukhác nhau cout<< sizeof(char*); // 4

cout<< sizeof(int*); // 4 cout<< sizeof(float*); // 4 cout<< sizeof(double*); // 4

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

malloc: Hàm malloc() thực hiện cấp phát bộ nhớ bằng cách chỉ định số byte cần cấp phát.

Hàm này trả về con trỏ kiểu void cho phép chúng ta có thể ép kiểu về bất cứ kiểu dữ liệu nào (trả về NULL nếu không đủ bộ nhớ)

void* malloc (size_t size);

Ví dụ:

int *a = (int *) malloc(sizeof( int )); // cấp phát 4 bytes

int *arr = (int *) malloc( 10 * sizeof( int )); // cấp phát 40 bytes

float *b = (float *) malloc(100*sizeof(float)); // cấp phát 400 bytes

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

calloc: hàm calloc() thực hiện cấp phát bộ nhớ gồm num phần tử và khởi tạo tất cả các ô nhớ có giá trị bằng 0 (trả về NULL nếu không đủ bộ nhớ).

void* calloc (size_t num, size_t size); Ví dụ:

int *b = (int *) calloc(10, sizeof( int ));int *a = (int *) calloc(1, sizeof( int )); int *a = (int *) calloc(1, sizeof( int ));

Một phần của tài liệu Bài giảng kỹ thuật lập trình chương 1 Pointer (Trang 45 - 49)

Tải bản đầy đủ (PDF)

(101 trang)