现在的位置: 首页 > 综合 > 正文

calloc函数

2012年10月20日 ⁄ 综合 ⁄ 共 2105字 ⁄ 字号 评论关闭

calloc不同于malloc,是对所分配的内存初始化。测试程序如下:

*****APUE中很重要的一句话:calloc将分配的内存空间初始化为0。但是ANSI C并不保证0值与浮点0或空指针的值相同。

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void calloc_int(void);
void calloc_char(void);
void calloc_float(void);
void calloc_ptr(void);

int main()
{
        calloc_int();
        calloc_char();
        calloc_float();
        calloc_ptr();
        exit(0);
}

void calloc_int(void)
{
        int *ptr2;
        int idx;

        printf("/n******** calloc_int start ********/n");

        ptr2 = (int *)calloc(10, sizeof(int));

        printf("After calloc: ptr = %p/n", ptr2);

        printf("Ptr = ");

        for(idx=0; idx<10; idx++){
                //ptr2[idx] = '0';
                printf("%d ",ptr2[idx]);
        }
        printf("/n");

        free(ptr2);

        return;
}

void calloc_char(void)
{
        char *ptr;
        char idx;

        printf("/n******* calloc_char start *********/n");

        ptr = (char *)calloc(64, sizeof(int));

        printf("After calloc: ptr = %p/n", ptr);

        printf("Ptr = ");

        for(idx=0;idx<10;idx++){
                printf("%d ", ptr[idx]);
        }
        printf("/n");

        free(ptr);

        return;
}

void calloc_float(void)
{
        float *ptr;
        char idx;

        printf("/n******* calloc_float start **********/n");

        ptr = (float *)calloc(64, sizeof(float));

        printf("After calloc: ptr = %p/n", ptr);

        printf("Ptr = ");

        for(idx=0; idx<10; idx++){
                printf("%f ", ptr[idx]);
        }
        printf("/n");

        free(ptr);

        return;
}

void calloc_ptr(void)
{
        int **ptr;
        char idx;

        printf("/n******* calloc_ptr *********/n");

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

        printf("Ptr = ");

        for(idx=0; idx<10; idx++){
                printf("%p", ptr[idx]);
        }
        printf("/n");

        free(ptr);

        return;
}

结果如下:

******** calloc_int start ********
After calloc: ptr = 0x80499a8
Ptr = 0 0 0 0 0 0 0 0 0 0

******* calloc_char start *********
After calloc: ptr = 0x80499d8
Ptr = 0 0 0 0 0 0 0 0 0 0

******* calloc_float start **********
After calloc: ptr = 0x80499d8
Ptr = 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

******* calloc_ptr *********
Ptr = (nil)(nil)(nil)(nil)(nil)(nil)(nil)(nil)(nil)(nil)

结论: 可对char, int, float, pointer都可以初始化,确认好用

抱歉!评论已关闭.