calloc函数

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都可以初始化,确认好用

posted on 2009-07-09 17:30  SunBo 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/sunyubo/archive/2009/07/09/2708322.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值