最近在看c语言的书,觉得还蛮有意思,有点收获,收集了几个优美的C语言程序。
1 将10进制数装换为任意进制数的小函数
char *
baseconv(unsigned int num, int base)
{
static char retbuf[33];
char *p;
if(base < 2 || base > 16)
return NULL;
p = &retbuf[sizeof(retbuf)-1];
*p = '\0';
do{
*--p = "0123456789abcdef"[num % base];
num /= base;
}while(num != 0);
return p;
}
“abcdef”[5]可以理解为 char *p = “abcdef”; …p[5]… 数组和下标在c语言中可以互换,所以也可写成5[“abcdef”](不提倡哈,原因你懂的)
2 计算无符号整数中为1的位的个数
static int bittab[] = {
0,1,1,2,
1,2,2,3,
1,2,2,3,
2,3,3,4
};
int bitcount(unsigned int u)
{
int n = 0;
for(; u != 0; u >>= 4)
n += bittab[u & 0x0f];
return n;
}
有关按位操作也没啥好介绍的,只是这个bittab数组构造的很精巧。
3 free函数的封装
void saferFree(void **pp)
{
if(pp != NULL && *pp != NULL){
free(*pp);
*pp = NULL;
}
}
#define safeFree(p) saferFree((void**)&(p))
free函数不会检查传入的指针是否是NULL,也不会在返回前把指针置为NULL。释放指针之后将其置为NULL是个好习惯。