C语言动态内存分配

C语言动态内存分配

C语言分配内存大小的一些方法

  • malloc(内存大小),用来分配一个固定的内存大小
  • realloc(需要扩容的首地址,分配的内存大小),用来进行内存重新分配(内存不够用了,就在原来的内存地址上去扩容
  • calloc(长度,步长),内存大小=长度*步长,效果与malloc一样
#include 
#include 



//创建一个数组,动态指定数组大小
int main() {
    //静态分配内存大小是固定的

    int len;
    printf("想要的长度",&len);

    scanf("%d",&len);

    //开辟内存 len * 4
    int *p = malloc(len * sizeof(int));

    int i = 0;
    for (; i < len; i++) {
        p[i] = rand() % 100;
        //p是数组首地址
        //遍历p的地址,根据步长就分配内存
        printf("%d, %#x \n",p[i],&p[i]);
    }

    int addlen;
    //
    printf("原来的不够用了,输入加长的长度");
    scanf("%d",&addlen);
    int *p2 = realloc(p, sizeof(int) *(len + addlen));

    i = 0;

    printf("--------------------------\n");

    for (; i < len + addlen ; i++) {
        p2[i] = rand() % 200;
        printf("%d, %#x \n",p2[i],&p2[i]);
    }

//    free(p);
    getchar();

}

/**
 ***注意:内存增大以后,首地址没有变哦!**  /Users/aniu/Library/Caches/CLion12/cmake/generated/d4af655b/d4af655b/Debug/TESTCPP
 *  想要的长度 5
 *  7, 0x53d00000
 *  49, 0x53d00004
 *  73, 0x53d00008
 *  58, 0x53d0000c
 *  30, 0x53d00010
 *  原来的不够用了,输入加长的长度5
 *  --------------------------
 *  72, 0x53e00000
 *  144, 0x53e00004
 *  78, 0x53e00008
 *  123, 0x53e0000c
 *  109, 0x53e00010
 *  40, 0x53e00014
 *  165, 0x53e00018
 *  92, 0x53e0001c
 *  42, 0x53e00020
 *  187, 0x53e00024
 *
 *  Process finished with exit code 0
 */

你可能感兴趣的:(c语言,内存分配,内存,malloc,C/C++)