C/C++
mobz
https://github.com/54shady
展开
-
在预先定义的内存位置构造一个对象
常常有人问这样一个C++问题:如何在预先定义的内存位置构造一个对象?在预先定义的内存缓冲构造一个对象有许多有用的应用。例如,一个定制的垃圾搜集器能使用一个大的预分配内存缓冲,用户在这个缓冲中构造其对象。当不再需要这些对象时,它们的存储空间被自动收回。这个技术在重视时间的应用中也很有用。在预先分配的内存缓冲构造一个对象是一种“时间常量”操作,之所以这样说是因为程序分配操作本身不会浪费宝贵的时间。转载 2012-09-26 16:00:55 · 611 阅读 · 0 评论 -
C语言中给函数取别名
#include void realFunctionName(void){ printf("This is how we do like alias\n");}void aliasName(void)__attribute__((weak, alias("realFunctionName")))int main(){ aliasName();}原创 2013-06-24 21:25:21 · 6598 阅读 · 1 评论 -
strtok 函数的使用方法。
#include #include int main(){ char src[] = "shady will be back"; char *delim = " "; char *item = NULL; item = strtok(src,delim); while(item) { printf("%s\n",item); item = strtok(NULL,d原创 2013-04-20 12:51:47 · 796 阅读 · 0 评论 -
my memmove 实现
#include #include void my_memmove(void* pDst,const void *pSrc,size_t size){ assert(pDst != NULL && pSrc != NULL); /* * pDst 和pSrc共享同一块内存区域 */ if((pSrc (char*)pDst)) { /* * 此时需要从尾部开始拷原创 2013-04-20 14:42:57 · 699 阅读 · 0 评论 -
bsd strtok实现和windowstrtok实现 NetBSD的方法是节约了空间,牺牲了时间(它的时间复杂度为N2) 而微软的方法是节约了时间(它的时间复杂度为N),牺牲了空间(开了一
NetBSD的方法是节约了空间,牺牲了时间(它的时间复杂度为N2)而微软的方法是节约了时间(它的时间复杂度为N),牺牲了空间(开了一个32个8位的空间)bsd实现:char* strtok_r(char* string_org,const char* demial,char** last){ const char* spanp; //span表示分隔,p表示指针 cha原创 2013-04-20 13:54:16 · 906 阅读 · 0 评论 -
将指定位 置1 或 置0
#include /* * 把bit_number指定的位置设置为1 * bit_number 0~31 * */int make_one(int value,int bit_number){ //return value = value | 1 << bit_number; return value |= 1 << bit_number;}/* * 把bit_numbe原创 2013-01-25 12:11:42 · 1187 阅读 · 0 评论 -
找出数组中最大数和最小数,要求O(3/2n)
#include #define SWAP(A,B) {A ^= B; B ^= A; A ^= B;}void find_max_min(int arr[],int len){ int i,max,min; /* * 第一次遍历数组: * 把两两比较的结果 * 较大的数放到下标是偶数的位置里 * 较小的数放到下标是奇数的位置里 */ for(i = 0; i <原创 2013-04-20 16:11:15 · 1878 阅读 · 0 评论 -
strcmp 实现
int my_strcmp (const char * src,const char * dst){ int ret = 0 ; while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst && *src) ++src, ++dst; if ( ret < 0 ) ret = -1 ; else i原创 2013-04-20 14:07:59 · 665 阅读 · 0 评论 -
双向链表的简单操作
data.h#ifndef _DATA_H_#define _DATA_H_typedef struct DbNode{ int data; struct DbNode *left; struct DbNode *right;}DbNode;#endif doubleLinklist.h#ifndef DOUBLE_LINKLIST_H#de原创 2013-03-21 11:28:09 · 732 阅读 · 0 评论 -
goahead 2.5 使用matrixssl-3-4-2-open 或 matrixssl-3-1-3-open
使用goahead 2.5版本不用做任何修改就可以支持matrixssl-3-1-3-open版本的SSL把matrixssl-3-1-3-open.tgz解压到goahead 的根目录下(webs-2-5)就可以了$>cd webs-2-5$>cd matrixssl-3-1-3-open$>make$>cd ../$>make在goahead的帮助文档有指导,可原创 2013-06-28 10:50:59 · 4424 阅读 · 0 评论 -
根据前序和中序遍历结果构造二叉树
/* binarytree.h */#ifndef BINARYTREE_H#define BINARYTREE_Htypedef struct node *link;struct node { unsigned char item; link l, r;};link init(unsigned char VLR[], unsigned char LVR[], int n);vo原创 2013-02-27 14:48:33 · 676 阅读 · 0 评论 -
Device Tree
原文地址转载 2014-10-07 22:09:21 · 2889 阅读 · 0 评论 -
cscope.file and tags for uboot 2012.04
#!/bin/bashUBOOT=$PWD#generate the cscope.files find $UBOOT \ -path "$UBOOT/include/configs*" -prune -o \ -path "$UBOOT/board/*"原创 2014-04-13 00:51:55 · 842 阅读 · 0 评论 -
gen kernel cscope.files 2.6.22.6
#!/bin/shset -x KERNEL=$PWDfind $KERNEL/arch/arm/boot/ -name "*.[chsS]" -print > $KERNEL/cscope.filesfind $KERNEL/arch/arm/common/ -name "*.[chsS]" -print >> $KERNEL/cscope.filesfind $KERNEL/a原创 2014-04-28 02:21:05 · 1031 阅读 · 0 评论 -
uboot 12.04 ctags cscope shell file.
#!/bin/bashUBOOT=$PWD#generate the cscope.files find $UBOOT \ -path "$UBOOT/include/configs*" -prune -o \ -path "$UBOOT/board/*" -prune -o \ -path "$UBOOT/nand_spl/*"原创 2014-04-09 01:03:53 · 1264 阅读 · 0 评论 -
C语言中全局变量和局部变量同名时的访问方法
#include int i = 911;/* * 方法一:用一个函数来访问 * */int get_global(){ return i;}int main(){ int i = 3; int tmp; printf("global_i = %d, local_i = %d\n",get_global(), i); /*转载 2013-08-13 11:47:04 · 5015 阅读 · 0 评论 -
单链表
data.h#include #include #include #ifndef _DATA_H_#define _DATA_H_typedef struct node{ int data; struct node *next;}node;#endifcreate.c#include "data.h"node *create(){ node *head原创 2013-08-07 00:17:54 · 714 阅读 · 0 评论 -
二叉树,前中后遍历,层遍历
data.h#include #include #include #ifndef _DATA_H_#define _DATA_H_typedef struct bitnode{ int data; struct bitnode *lchild, *rchild;}bitnode, *bitree;#endifcreate.c#include "data.h"原创 2013-08-05 03:07:21 · 936 阅读 · 0 评论 -
任意长度两个正整数相加
#include #include #include #ifdef DEBUG#define debug(fmt, args...) printf(fmt, ##args)#else#define debug(fmt, args...)#endifchar *big_add(char *num1, char *num2){ int c = 0; /* 开始最低进位为0 */原创 2013-08-03 04:08:20 · 1893 阅读 · 1 评论 -
堆排序 简单实现
#include //#include //#include #define N 10/* * 堆大小 * */int heapSize = 0;/* * 返回左子节点索引,root_index 堆顶索引 * */int left_child_index(int root_index){ return ((root_index << 1) + 1);}/*原创 2013-02-26 14:41:42 · 444 阅读 · 0 评论 -
alarm pause 定时器的很简单介绍
#include #include #include int main(){ int ret; /* * 定时器函数,设定一个定时器, * 当定时器指定的时间到了就像进程发送一个SIGALARM信号 * 一个进程只能有一个定时器,如果在调用alarm之前设置过定时器 * 则任何以前的闹钟时间都被新的值所取代 * */ ret = ala原创 2013-03-08 14:00:17 · 864 阅读 · 0 评论 -
字符串中子串替换成新子串 简单实现
#include #include #include /* * parameter: * src:输入参数,要替换的字符串 * oldSub:src中将要被替换的子串 * newSub:替换成此串 * output:输出结果 * */char* replace(const char* src,const char* oldSub,const char*原创 2013-01-09 23:45:51 · 1284 阅读 · 0 评论 -
my strcat 简单实现
#include char* myStrcat(char* dst,const char* src){ /* * ret用于保留dst的头指针 * 作为返回值 * */ char* ret = dst; /* * 取dst中'\0'前一位 * */ while(*dst++); dst--; /* * 拼接字符串原创 2013-01-09 22:58:25 · 714 阅读 · 0 评论 -
删除字符串中所有指定的字符
#include char* del_char(char* src,char del_this_char){ /* * 检查参数的有效性 * */ if(NULL == src) return NULL; /* * 定义两个指向字符串头的指针 * 以便遍历字符串 * ret用于返回 * tmp用于遍历 * */ cha原创 2013-01-09 22:34:49 · 1090 阅读 · 0 评论 -
优化版 字符串翻转
方法1:(普通版)#include #include #include void rever(char* src,char* out_put){ int i = 0; char *res = src; int len = strlen(res); while(*res != '\0') { out_put[len - i - 1] = *res;原创 2013-01-09 19:22:24 · 514 阅读 · 0 评论 -
my strstr 简单实现
#include const char* my_strstr(const char* src,const char* sub){ const char* bp; const char* sp; /* * 判断参数的有效性 * */ if((src == NULL) || (sub == NULL)) return src; /* *原创 2013-01-09 14:45:38 · 752 阅读 · 0 评论 -
int 型ip 转 字符串型ip
#include /* * int 型ip 转换成 字符型 * & 0x000000FF ---> 取低八位 * * xxx.xxx.xxx.xxx 最大长度15个字节 * */#define MAX_IP_LEN 16char* ip2str(int ip,char* strIp){ snprintf(strIp,MAX_IP_LEN,"原创 2013-01-24 12:42:28 · 2056 阅读 · 0 评论 -
my atoi 简单实现
#include #include int str2int(const char* str){ /* * ptr保存str字符串开头 * */ const char* ptr = str; /* * 如果第一个字符是正负号的话,就移动到下一个字符 * */ if(*str == '-' || *str == '+') str++;原创 2013-01-09 11:13:03 · 674 阅读 · 0 评论 -
my itoa 简单实现
#include #include #include /* * (正负)整数转字符串 * */void my_itoa(int n,char* out_put){ /* *先取绝对值 * */ int tmp = n < 0 ? -n : n; char buf[1024] = {0}; int i = 0; while(tmp)原创 2013-01-09 10:50:06 · 1155 阅读 · 0 评论 -
计算"1"的个数
#include /* * 返回参数中值为1的位的个数 * */int count_ones(unsigned value){ int ones;//用于统计个数 for(ones = 0; value != 0; value = value >> 1) if(value % 2 != 0)//如果最低位为1,计数增加1 ones = ones +原创 2013-01-25 11:50:16 · 711 阅读 · 0 评论 -
二分法查找
#include int binary_search(int *arr,int len,int find_this){ int mid,start = 0,end = len; while(start <= end) { mid = (start + end) / 2; /* * 要找的数位于右半部分 * 结束边界不变,还是end原创 2013-01-25 22:13:55 · 643 阅读 · 0 评论 -
选择排序 简单实现
#include void select_sort(int arr[],int len){ int i,j,min,index_of_min; /* * 遍历数据 遍历len-1次 * */ for(i = 0; i < len; i++) { /* * 每次都先将遍历区间的第一个元素默认是最小的数 * min保存最小的数,index_原创 2013-02-25 10:00:51 · 454 阅读 · 0 评论 -
取(结构体)成员偏移量
#include /* *取(结构体)成员偏移量 * */#define offset(TYPE,MEMBER) ((int)&((TYPE *)0)->MEMBER) #pragma pack(1)//设置对其方式为1个字节struct test{ char c; int n; int m; char *ptr;};#pragma原创 2013-01-26 12:18:43 · 579 阅读 · 0 评论 -
二进制打印
#include int main(){ int n, i; unsigned mask; scanf("%d", &n); /* *这里写成sizeof(n) 是为了让代码能更好的有移植性,即和平台无关性 *因为不同平台sizeof int 值不一样 * */ mask = 1 << (sizeof(n)*8 - 1); for原创 2013-02-05 05:29:19 · 953 阅读 · 0 评论 -
'#' 和 '##' 的作用
#cat pre.c#include /* * 宏定义中, *# 宏函数参数字符串化 *## 用来连接两个标识符 * (通常其中一个标识符是宏函数的参数)为一个标识符 **/#define PRINT(x) printf(#x" = %d\n", x)#define GENERATOR(type) \ type max_##type(type a, ty原创 2013-01-21 22:39:07 · 5283 阅读 · 0 评论 -
my quick sort
#include #define SWAP(A,B) {A ^= B; B ^= A; A ^= B;}void quickSort(int arr[],int left,int right){ int i,j,mid; if(left < right) { mid = arr[(left + right) / 2]; i = left - 1;原创 2013-01-21 20:43:11 · 628 阅读 · 0 评论 -
带---有测试代码----的二分法查找(折半查找)
#include #include /* * 带有测试代码的二分法查找 * Precondition:已经排好序 * Maintenance:如果find_this 在数组中的话 就一定能找得出来 * Postcondition:如果find_this 不在数组中的话,就一定要保证能返回-1 * */#define len 8int arr[] = {1原创 2013-01-25 22:58:40 · 913 阅读 · 0 评论 -
归并排序--简单实现
#include #define LEN 9int a[LEN] = {43,5,2,4,7,1,3,2,6};void merge(int start,int mid,int end){ int n1 = mid - start + 1; int n2 = end - mid; int left[n1],right[n2]; int i,j,k;原创 2013-01-25 21:50:50 · 561 阅读 · 0 评论 -
用堆栈实现倒序打印
#include char stack[512];int top = 0;void push(char c){ stack[top++] = c;}int pop(void){ return stack[--top];}int is_empty(void){ return top == 0;}int main(){原创 2013-01-25 23:27:20 · 985 阅读 · 0 评论 -
Linux C 编程
linuxc 原文地址main 函数我们知道main函数的标准原型应该是如下所示int main(int argc, char *argv[])argc 是命令行参数的个数argv 是一个指向指针的指针,为什么不是指针数组呢?因为函数原型中的[]表示指针而不表示数组,等价于 char **argv那为什么要写成char *argv[]而不写成 char **argv 呢?这样写给读代码的人提供了有用原创 2016-10-28 14:39:28 · 476 阅读 · 0 评论