首页 > 代码库 > c语言小程序

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是个好习惯

c语言小程序