内存管理

1  内存五大区  

    栈    堆    静态区  常量区  代码区

2

    int result = 0;

    //calloc和malloc功能一样,都是在堆区开辟一块新的空间,唯一不同的是,calloc还把空间重启了一下

    //第一个参数是分配多少个房间

    //第二个参数是每个房间多少字节

 

    //realloc 追加空间, 如果空间地址够用,直接用原来的空间地址就行,

    //如果追加空间不够,重新开辟新的空间,并返回新的地址

    //系统会帮我们拷贝原来的空间的内容到新的空间,并释放原来的老空间

    //我们释放新空间即可

    int *p = malloc(12);

    int *q = calloc(3 , 4);

 

    memset(p , 0 , 12);//逐个字节设置

    

    for (int i = 0; i < 3; i++) {

        *(p + i) = arc4random() % 3;

        

        printf("%d" , *(p + i));

    }

    printf("\n*********\n");

    for (int i = 0; i < 3; i++) {

        *(q + i) = arc4random() % 1;

        printf("%d" , *(q + i));

    }

    printf("\n**********\n");

    result = memcmp(p , q , 12);//比较两个地址里面的内容

    if (result == 0) {

        printf("GOOD\n");

    }else{

        printf("FALEN");

    }

    

    free(p);

    p = NULL;

    free(q);

    q = NULL;

 3

//在堆里申请一块空间,存放二维数组

    int (*a)[4] = malloc(sizeof(int) * 12);

    for (int i = 0; i < 3; i++) {

        for (int j = 0; j < 4; j++) {

            *(*(a + i)+ j) = arc4random() % 30 + 1;

        }

    }

    

    for (int i = 0; i < 3; i++) {

        for (int j = 0; j < 4; j++) {

            printf("%d\t" , *(*(a + i) + j));

        }

        printf("\n");

    }

4

      int a = 6;

      void *p = &a; //void *表示泛型指针变量

      printf("%d\n" , *(int *)p);//先强制转化整形指针 再取内容

       int b = 7;

      printf("%.3f\n" , (float)b);

 

posted @ 2015-04-23 21:37  fengkuangIT  阅读(119)  评论(0编辑  收藏  举报