Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Calloc trong ngôn ngữ C là gì?


Hàm cấp phát bộ nhớ thư viện C void *calloc(size_t nitems, size_t size) cấp phát bộ nhớ yêu cầu và trả về con trỏ tới nó.

Khác với malloc: malloc không đặt bộ nhớ về 0, calloc đặt bộ nhớ cấp phát về 0.

Các hàm cấp phát bộ nhớ

Bộ nhớ cấp phát 2 cách:

Calloc trong ngôn ngữ C là gì?

Cấp phát tại compile time không thể thay đổi khi chạy. Vấn đề thiếu hoặc lãng phí bộ nhớ.

Giải pháp: cấp phát động theo yêu cầu khi chạy.

Hàm thư viện chuẩn cho quản lý bộ nhớ động:

  • malloc()
  • calloc()
  • realloc()
  • free()

Hàm calloc()

  • Dùng để cấp phát các khối bộ nhớ liên tục tại runtime.
  • Được thiết kế đặc biệt cho mảng.
  • Trả về con trỏ void trỏ tới địa chỉ cơ sở bộ nhớ cấp phát.

Cú pháp:

void *calloc(số phần tử, kích thước byte)

Ví dụ

int *ptr; 
ptr = (int*) calloc(500, 2);

Ở đây, 500 khối bộ nhớ mỗi khối 2 byte được cấp phát liên tục. Tổng bộ nhớ = 1000 byte.

Calloc trong ngôn ngữ C là gì?

int *ptr; 
ptr = (int*) calloc(n, sizeof(int));

Chương trình ví dụ

Chương trình C tính tổng số chẵn/lẻ dùng calloc:

#include <stdio.h> 
#include <stdlib.h> 
void main() { 
    int i, n; 
    int *p; 
    int even = 0, odd = 0; 
    p = (int*) calloc(n, sizeof(int)); 
    printf("Nhập số phần tử: "); 
    scanf("%d", &n); 
    if (p == NULL) { 
        printf("Bộ nhớ không khả dụng"); 
        exit(0); 
    } 
    printf("Các phần tử:\n"); 
    for (i = 0; i < n; i++) { 
        scanf("%d", p + i); 
    } 
    for (i = 0; i < n; i++) { 
        if (*(p + i) % 2 == 0) 
            even += *(p + i); 
        else 
            odd += *(p + i); 
    } 
    printf("Tổng số chẵn: %d\n", even); 
    printf("Tổng số lẻ: %d\n", odd); 
}

Kết quả

Nhập số phần tử: 4 
Các phần tử: 12 56 23 10 
Tổng số chẵn: 78 
Tổng số lẻ: 23