Computer >> 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ớ được yêu cầu và trả về một con trỏ cho nó.

Sự khác biệt trong malloc và calloc là malloc không đặt bộ nhớ thành 0, trong khi calloc đặt bộ nhớ được cấp phát thành 0.

Chức năng cấp phát bộ nhớ

Bộ nhớ có thể được cấp phát theo hai cách như được giải thích bên dưới -

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

Khi bộ nhớ được cấp phát tại thời điểm biên dịch, nó không thể thay đổi trong quá trình thực thi. Sẽ có vấn đề về sự thiếu hụt hoặc lãng phí bộ nhớ.

Giải pháp là tạo bộ nhớ động, tức là theo yêu cầu của người dùng trong quá trình thực thi chương trình.

Các chức năng thư viện tiêu chuẩn được sử dụng để quản lý bộ nhớ động như sau -

  • malloc ()
  • calloc ()
  • realloc ()
  • miễn phí ()

Hàm Calloc ()

  • Hàm này được sử dụng để cấp phát các khối bộ nhớ liên tục tại thời gian chạy.

  • Điều này được thiết kế đặc biệt cho mảng.

  • Nó trả về một con trỏ void, trỏ đến địa chỉ cơ sở của bộ nhớ được cấp phát.

Cú pháp cho hàm calloc () được đưa ra bên dưới -

void *calloc ( numbers of elements, size in bytes)

Ví dụ

Ví dụ sau đây cho thấy cách sử dụng hàm calloc ().

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

Tại đây, 500 khối bộ nhớ mỗi khối có kích thước 2 byte sẽ được cấp phát liên tục. Tổng bộ nhớ được cấp phát =1000 byte.

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

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

Chương trình mẫu

Dưới đây là một Chương trình C để tính tổng các số chẵn và số lẻ trong một tập hợp các phần tử bằng cách sử dụng các hàm cấp phát bộ nhớ động Calloc.

#include<stdio.h>
#include<stdlib.h>
void main(){
   //Declaring variables, pointers//
   int i,n;
   int *p;
   int even=0,odd=0;
   //Declaring base address p using Calloc//
   p = (int * ) calloc (n, sizeof (int));
   //Reading number of elements//
   printf("Enter the number of elements : ");
   scanf("%d",&n);
   /*Printing O/p -
   We have to use if statement because we have to check if memory
   has been successfully allocated/reserved or not*/
   if (p==NULL){
      printf("Memory not available");
      exit(0);
   }
   //Storing elements into location using for loop//
   printf("The elements are : \n");
   for(i=0;i<n;i++){
      scanf("%d",p+i);
   }
   for(i=0;i<n;i++){
      if(*(p+i)%2==0){
         even=even+*(p+i);
      } else {
         odd=odd+*(p+i);
      }
   }
   printf("The sum of even numbers is : %d\n",even);
   printf("The sum of odd numbers is : %d\n",odd);
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

Enter the number of elements : 4
The elements are :
12
56
23
10
The sum of even numbers is : 78
The sum of odd numbers is : 23