C语言-malloc,calloc,realloc 函数的使用(堆空间的使用)

时间:2020-06-13 01:52:32   收藏:0   阅读:42

内存中的五大区域

如何向堆区申请字节空间来使用

技术分享图片

    int * num = malloc(4); // 在堆中申请连续的四个字节空间,并将第一个字节的地址返回来,所以要用指针接收
    int * num1 = malloc(4);
    int * num2 = malloc(4);
    printf("num的地址:%p\n",num);
    printf("num1的地址:%p\n",num1);
    printf("num2的地址:%p\n",num2);
    
// 输出内容:
num的地址:0x1007311a0
num1的地址:0x10072ef60
num2的地址:0x10072d6e0
    int *num = malloc(12);
    for (int i = 0; i < 3; i++) {
        printf("num[%i] = %i\n",i,*(num+i));
        printf("num[%i]的地址:%p\n",i,&num[i]);
    }
    // 如果申请失败返回的指针是NULL,所以申请完最好自己判断下是否成功
    int* num = malloc(12);
    num[0] = 1;
    num[1] = 2;
    num[2] = 3;
    if(num != NULL){ // if(num)也可以,null 代表的就是 0,如果不是 0 那么就进入
        for (int i = 0; i < 3; i++) {
            num[i] = num[i] * 100;
        }
        
        for (int i = 0; i < 3; i++) {
            printf("num[%i] = %i\n",i,num[i]);
        }
    }
free(num);

calloc 函数

    // calooc 函数
    int *num = calloc(3, sizeof(int)); // 申请三个,int 类型的空间地址
    if(num){
        for (int i = 0; i < 3; i++) {
            num[i] = i * 10;
        }
        
        for (int i = 0; i < 3; i++) {
            printf("num[%i] = %i\n",i,num[i]);
        }
    }
    
    // calooc 函数
    int *num = calloc(3, sizeof(int)); // 申请三个,int 类型的空间地址
    if(num){
        
        for (int i = 0; i < 3; i++) {
            printf("num[%i] = %i\n",i,num[i]);
        }
    }

// 控制台输出
num[0] = 0
num[1] = 0
num[2] = 0

realloc 函数

    int * num1 = realloc(num, 4);// 发现 calloc 申请的 3 个 int 类型空间不够用了,那么就用 realloc 进行扩容
    // 如果 calloc 申请的3e个 int 类型空间后面的地址够用,那就跟着后面申请
    // 如果 calloc 申请的 3 个 int 类型空间后面的地址不够用,那就在堆区重新找一块地址,并且将原来 calloc 申请的地址复制过来,并将低字节地址返回
    if(num1){
        for (int i = 0; i < 4; i++) {
            num1[i] = i * 10;
        }
        
        for (int i = 0; i < 4; i++) {
                printf("num1[%i] = %i\n",i,num1[i]);
            }
        free(num1);
    };

原文:https://www.cnblogs.com/shanshan-test/p/13110986.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!