动态Array处理方法

在实际开发中,有时需实时处理数组。本文利用内存拷贝实现动态数组相关的宏操作,给出了INSERT_ELEM和REMOVE_ELEM两个宏的具体实现代码,可用于向数组插入和移除元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.引子
    在实际开发中,我们有可能实时的处理一个数组(Array),本文,我利用内存拷贝来实现动态数组相关的宏操作.

二.相关宏
 
#if defined(_MSC_VER)
#      define  VLCCVP (void **)
#else
#      define  VLCCVP
#endif

#define  INSERT_ELEM(p_ar,i_oldsize,i_pos,elem)                                               /
              do                                                                                                                          /
              {                                                                                                                             /
                        if( !i_oldsize) ( p_ar)=NULL;                                                                  /
                        (p_ar)=VLCCVP realloc(p_ar,((i_oldsize)+1)*sizeof(*(p_ar)));       /
                        if((i_oldsize)-(i_pos))                                                                              /
                         {                                                                                                                  /
                               memmove((p_ar)+(i_pos)+1,(p_ar)+(i_pos),                             /
                                                    ( (i_oldsize)-(i_pos))*sizeof(*(p_ar)));                     /
                        }                                                                                                                  /
                        (p_ar)[i_pos]=elem;                                                                               /
                       (i_oldsize)++;                                                                                            /
               } while(0)                                                                                                          
          
    #define REMOVE_ELEM(p_ar,i_oldsize,i_pos)                                                   /
              do{                                                                                                                       /
                           if((i_oldsize)-(i_pos)-1)                                                                      /
                            {                                                                                                             /
                                       memmove((p_ar)+(i_pos),(p_ar)+(i_pos)+1,                   /
                                                          ((i_oldsize)-(i_pos)-1)*sizeof(*(p_ar)));           /
                            }                                                                                                             /
                            if(i_oldsize>1)                                                                                     /
                           {                                                                                                              /
                                    (p_ar)=realloc(p_ar,((i_oldsize)-1)*sizeof(*(p_ar)));           /
                           }                                                                                                              /
                           else                                                                                                       /
                           {                                                                                                              /
                                     free(p_ar);                                                                                  /
                                     (p_ar)=NULL;                                                                            /
                            }                                                                                                            /
                            (i_oldsize)--;                                                                                       /
                       }while(0)                                                               
                        
            
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值