zoukankan      html  css  js  c++  java
  • C语言基础温故

    一、C语言中数组动态增长有哪些方法?

    1、在原数组单元后面是没法再扩长的,因为后面的单元没法保证一定有。所以,数组原址动态增长肯定是不行的;

    2、要么定义长一点的数组,要么自已把N个数组用链表串起来,但很繁琐;

    3、重新分配更长的数组,把原数组数据复制过来,再释放掉原数组,这是一般动态数组模块的普遍做法。但效率很低。

    例如下面方法都是重新分配更长的数组空间:

    int* a=(int*)malloc(n*sizeof(int));//n是数组的大小,如果想让数组大小动态分配,可以使用下面做法,记得用完要free
    int* a=(int*)calloc(n,sizeof(int));//n是数组的大小,或者这样calloc函数的一个好处就是分配完内存区域后会自动把该区域清零,所以特别适合数组
    int* a=(int *)realloc(a,m*sizeof(int));//m新数组的大小,并且,原来malloc或者calloc的内存区域会自动被free掉,不用你操心。
    

      

    二、结构体

    基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。

    之所以写此篇是因为OC里面,一些底层API,OC很多对象其实都是结构体,某些结构体里有数组,默认都是 xxx[1] ;

    比如:

    struct objc_method_list {
        struct objc_method_list *obsolete                        OBJC2_UNAVAILABLE;
    
        int method_count                                         OBJC2_UNAVAILABLE;
    #ifdef __LP64__
        int space                                                OBJC2_UNAVAILABLE;
    #endif
        /* variable length structure */
        struct objc_method method_list[1]                        OBJC2_UNAVAILABLE;
    }    
    

      

    struct objc_cache {
        unsigned int mask /* total = mask + 1 */                 OBJC2_UNAVAILABLE;
        unsigned int occupied                                    OBJC2_UNAVAILABLE;
        Method buckets[1]                                        OBJC2_UNAVAILABLE;
    };
    

      

    更多:

    http://blog.csdn.net/huqinwei987/article/details/23625823

    http://blog.csdn.net/ray0354315/article/details/54706803

  • 相关阅读:
    SVN服务器搭建和使用(二)
    SVN服务器搭建和使用(一)
    【CentOs】配置nginx
    【CentOs】sudo使用
    【CentOS】搭建Web服务器
    【CentOS】搭建git服务器
    【Python】内置数据类型
    【Python】Eclipse和pydev搭建Python开发环境
    【Python】一个简单的例子
    【Python】vim7.4 配置python2.6支持Gundo
  • 原文地址:https://www.cnblogs.com/qiyer/p/7526650.html
Copyright © 2011-2022 走看看