最近在看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"](不提倡哈,緣由你懂的)blog
2)計算無符號整數中爲1的位的個數it
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的構造class
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是個好習慣static