z

zasdsd

V1

2022/04/17阅读:15主题:橙心

C语言学习日记_malloc和realloc

C语言学习日记

复习一下以前学的知识, demo很简单,就娱乐娱乐。

  1. malloc函数是动态申请内存时使用的
  2. realloc动态重新申请内存。
  3. 栈内存的创建 直接使用 int arr[xxx]
#include <stdio.h>
#include <stdlib.h>
/**
 * 学习C的函数
 *     malloc动态申请内存
 *     realloc动态重新申请内存 
 * 
 * @return int 
 */


int main(){
    int num;
    printf("请输入数组长度:");
    scanf("%d",&num);
    //动态申请内存
    int * arr = (int *) malloc(sizeof(int )* num); 
    int input_num;
    for (int i = 0; i < num; i++)
    {
        /* code */
        printf("请输入数字:");
        scanf("%d",&input_num);
        arr[i] = input_num;
        printf("数字是 %d, 数组的地址是 :%p,  其中一项的地址是: %p \n",*(arr+i), arr, arr+i);
    }

    for (int i = 0; i < num; i++)
    {
        /* 这里是玩的,这里居然能不停的取值和取地址,实际开发不要学我 */

        printf("数字是 %d,   其地址是: %p \n",*(arr+i), 
        &*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*(arr+i));

    }
    int new_num;
     printf("请重新输入数组长度:");   
    scanf("%d",&new_num);
    int count = num+new_num;
    int * new_arr = (int *)realloc(arr,sizeof(int)*count);
    /**
     * 情况一 重新申请内存复用之前的内存
     * 情况二 重新申请后,全新生成地址,这种情况 arr会释放
     * 情况三 申请失败 所以下面需要判断new_arr是不是申请成功
     * 
     */

    if (new_arr)
    {
        for (int i = 0; i < count; i++)
        {
            new_arr[i] = 100+i;
            printf("new 数字是: %d, 地址是: %p \n",*(new_arr+i),new_arr+i);  
        }
    }
    
    //释放arr内存
    if(arr){
        free(arr);
        arr = NULL;
    }

    if(new_arr){
        free(new_arr);
        new_arr = NULL;
    }


    return 0;
}

分类:

后端

标签:

C++

作者介绍

z
zasdsd
V1