一.引子
在实际开发中,我们有可能实时的处理一个数组(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)
在实际开发中,我们有可能实时的处理一个数组(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)