黑马程序员技术交流社区

标题: IOS基础第十二天(中)字数限制,分开发,版主莫警告 [打印本页]

作者: dushoupeng    时间: 2015-7-10 09:35
标题: IOS基础第十二天(中)字数限制,分开发,版主莫警告

6.动态内存分配:一般按照可以容纳可能出现的最多元素来做

优点:简单

缺点:声明中引用了限制,如果程序需要使用的元素超过声明的长度:


7.常用动态分配内存分配函数:

   C语言中提供了3个动态内存分配函数:


    1)malloc 函数


      格式: void * malloc(unsigned size);


      从内存的堆区分配大小为size个字节的连续的内存空间

      如果内存分配成功 返回内存的首地址


                失败  NULL




#include <stdio.h>

#include <stdlib.h>

/**

* malloc函数的使用

*/

void test1(){


    //从内存中申请一块内存空间,可以存储4个整数

    // = 赋值,要求等号的左右两侧的类型要一致

    //p中存放的事新申请的内存空间的首地址

    //注意:malloc 申请的内存空间,如果我们不赋值?

    //     是垃圾数

    int *p = (int*)malloc(4*sizeof(int));   //16个字节

   

    //使用一个函数给malloc申请的空间进行初始化

    memset(p,'a',16);

   

    if (p!=NULL) {

        

        //申请成功做的事情

        //        *p = 10;

        //        *(p+1) = 100;

        //        *(p+2) = 1000;

        //        *(p+3) = 10000;   //存放4个整数

        

    }else{

        //内存申请失败

        printf("内存申请失败!\n");

        

    }

   

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

        

       printf("%c\t",*(p+i));

        

    }


}


void test2(){


    //calloc 分配指定块数和长度的内存空间

    //格式:calloc(块数,长度)

    //分配了4块,每一块内存长度为4的内存空间

    //他们的地址也是连续的

   

    //注意事项:

    //calloc 它使可以帮我们自动的初始化为0

    int *p = (int *)calloc(4,sizeof(int));   //16个字节

   

    if (p!=NULL) {

        

        //申请成功做的事情

        *p = 10;

        *(p+1) = 100;

        *(p+2) = 1000;

        *(p+3) = 10000;   //存放4个整数

        

    }else{

        //内存申请失败

        printf("内存申请失败!\n");

        

    }

   

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

        

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

        

    }


}

int main(int argc, const char * argv[]) {

   

    int *p = (int*)malloc(4*sizeof(int));   //16个字节

    printf("old %p\n",p);

    //realloc 函数可以给已经存在的空间扩充大小

    p = realloc(p, 40*sizeof(int));

    printf("new %p\n",p);

    //40个内存空间

    if (p!=NULL) {

        

        //申请成功做的事情

        *p = 10;

        *(p+1) = 100;

        *(p+2) = 1000;

        *(p+3) = 10000;   //存放4个整数

        

        *(p+39)= 1;

       printf("%d\n",*(p+39));

        

    }else{

        //内存申请失败

        printf("内存申请失败!\n");

   

    }

   

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

   

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

   

    }

   

    return 0;

}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2