C/C++
C/C++编程功底
liberg
JAVA/大数据/前端(Web/H5/Android)
展开
-
代码质量之——递归删除文件夹
算法执行效率有高有底,数据结构设计有好有坏,代码质量亦可分出优劣,不管哪一个环节的质量好坏,都会影响呈现到用户面前的最终体验。玩过3D网游的童鞋都知道,暴雪的魔兽世界场景优美、画面流畅,加载时间还短、不吃内存(唯一“不足”是角色丑陋),国产3D就逊多了。所以,除了架构设计上有优有劣、算法上存在高明与否,编码上也是有得考究的。实现同样的功能,不同的人写的代码是可以看到差别的,同一个人随着经验的积累也原创 2013-11-08 11:17:11 · 948 阅读 · 0 评论 -
C/C++/js判断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式
第一个版本://return true on big-endian machinesbool check_big_endian1(){ int a = 0; int *p = &a; *(char *)p = 1;//将4字节中首个字节(首个字节)设置成1,内存地址由低到高是\x01,\x00,\x00,\x00 return a != 1;//小端模式a=0x00000001,原创 2014-06-26 14:36:08 · 1730 阅读 · 2 评论 -
C/C++中逗号表达式
1、用于一个表达式中分割多个子操作,最后一个子操作的结果作为整个表达式的值。例如windows中关于assert宏的定义:#define assert(exp) (void)( (exp) || (_assert(#exp, __FILE__, __LINE__), 0) )如果exp为真(约定用1表示真,0表示假),则整个assert的结果是(void)1,否则整个assert表达式的最原创 2014-01-12 09:20:00 · 2746 阅读 · 3 评论 -
回文数判断
代码:bool symm(int m){ assert(m >= 0); int tmp = m; int n = 0; cout<<m; while(tmp) { n = n*10 + tmp%10; tmp /= 10; } cout"<<n<<endl; return (m == n);}int main(){ int num = 0; whi原创 2013-11-08 13:38:09 · 800 阅读 · 0 评论 -
C语言编程:数字0的妙用
【技巧一】#if 0//Code here#endif用于方便地注释不愿意舍弃的代码,将0改为1又可以重新启用这部分代码。ps:频繁地注释和启用某一段代码进行某项测试任务时,相当有用。【技巧二】sleep(0)用于让出CPU时间片。【技巧三】do...while(0)a、用于出错资源释放处理,减少代码冗余,避免使用goto语句;b、用原创 2013-11-08 14:03:44 · 908 阅读 · 0 评论 -
Linux C多线程
一个简单的Linux C多线程程序:主线程创建启动了2个子线程,通过pthread_join等待子线程结束。#include <stdio.h>#include <pthread.h>#include <unistd.h>#define NUM 5int main(){ pthread_t t1, t2; void *print_msg(void *); pthread_原创 2017-09-07 17:57:03 · 307 阅读 · 0 评论 -
atol()函数一个可移植的版本
long atol(char *s){ long ret = 0; int sign = 0; switch(*s) { case '-': sign = 1; //do not break here! case '+': s++; break; } while(*s>='0' && *s<='9') { int n = *s++ - '0'; if(s原创 2014-07-05 19:40:48 · 551 阅读 · 0 评论 -
二分查找算法(C语言版)
二分查找的前提:数组本身是有序组织的。算法思想:采用分治策略,每进一步都将问题规模减半,最多经过logN次(对数的底为2)查找能得到结果。算法实现:有循环和递归两种方法,递归需要更多的函数嵌套调用,函数执行时栈帧的开销大,当然选择循环的写法。C语言举例说明:对已排好序的整数数组(arr大小为size,升序排列)进行二分查找,函数声明为:int *binary_search(int...原创 2014-07-05 18:11:06 · 1318 阅读 · 0 评论 -
rewind(stdin)
rewind(stdin)清除标准输入的按键缓冲区。fflush()清除I/O流级别的缓冲区。先看看Microsoft给出的例子:#include void main(void){ int ch ; puts( "Input two or more chars. One is read now." ); ch = getchar(); putchar( ch );原创 2014-02-10 11:00:01 · 9344 阅读 · 0 评论 -
细究代码之——dirname实现
开发中一部分工作是编写服务端的功能库,经常需要用到类似于Linux上dirname的功能。先贴出第一个版本:#define IS_SLASH_P(c) (*(c) == '/' || *(c) == '\\')//对于合法的路径输入,返回其上一级目录,不包含目录分隔符//返回值为pcDir的长度int lib_iDirName(const char *path, char *pcD原创 2014-01-17 11:11:24 · 1521 阅读 · 0 评论 -
C编程中的一些细节
1、都知道strcpy保证拷贝后的字符串以'\0'结尾,但是需要注意strncpy则不一定能保证;2、判断一个字符串长度是否为0,*str == '\0'比strlen(str) == 0效率高;原创 2013-11-08 14:35:29 · 641 阅读 · 0 评论 -
C/C++ strcpy实现
//网络上普遍认同的写法char *strCpy(char *dest, const char *src){assert(dest != NULL && src != NULL);char *tmp = dest;while( (*tmp++ = *src++) != '\0' );return dest;}原创 2013-11-08 09:51:19 · 660 阅读 · 0 评论