博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言小程序
阅读量:7229 次
发布时间:2019-06-29

本文共 969 字,大约阅读时间需要 3 分钟。

最近在看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是个好习惯

转载于:https://www.cnblogs.com/yangtze736-2013-3-6/p/4083536.html

你可能感兴趣的文章
TODO:Golang指针使用注意事项
查看>>
五大角色和主域控制器
查看>>
QTcpserver编程
查看>>
ScrollView + Listview 实现方案优选
查看>>
redis概述与使用
查看>>
linux下如何设置和查看系统环境变量
查看>>
jaxws-webservice编程
查看>>
网众安装U盘带WINPE和MaxDOS
查看>>
Linux man文档英语单词
查看>>
oracle的权限和角色区别
查看>>
组策略管理——软件限制策略(4)
查看>>
tcp的三次握手
查看>>
u盘中的ubuntu为了减少日志系统频繁写文件所修改的/etc/fstab
查看>>
RAID浅谈
查看>>
Map接口
查看>>
IntelliJ IDEA 使用教程
查看>>
『高级篇』docker之服务发现、部署更新和扩容(七)
查看>>
『高级篇』docker之了解CICD和DevOps(41)
查看>>
shell内置命令和外部命令区别
查看>>
AD域管理浅谈
查看>>