c
dhz120
这个作者很懒,什么都没留下…
展开
-
关于typedef
1)typedef int* Func(int);分析:去掉typedef ,得到正常变量声明=> int*Func(int);变量Func的类型为一个函数标识符,该函数返回值类型为int*,参数类型为int;=> "typedef int*Func(int)"中Func是函数类型(函数返回值类型为int*,参数类型为int)的一个typedef-name。Func *转载 2013-08-10 16:20:23 · 685 阅读 · 0 评论 -
关于二级指针
#include #include #include int my_malloc(void **buf, size_t len){ void *tmp = malloc(len); assert(tmp != NULL); //tmp是个地址,传给外边的变量, //即变量的内容是个指向某块内存的地址 //所以参数就是一个二级指针的形式 *原创 2014-04-02 12:56:31 · 582 阅读 · 0 评论 -
scanf与sprintf
scanf: 从字符串中拆分出想要的类型sprintf: 把各种类型的东西合成一个字符串#include int main(void){ char *buf = "1:23:abc"; int a, b; char c[5]; char d[10]; sscanf(buf, "%d:%d:%s", &a, &b, c); pr原创 2014-04-03 15:15:03 · 1657 阅读 · 0 评论 -
my_strcmp
int my_strcmp(char *s1, char *s2){ assert(s1 != NULL && s2 != NULL); char *p = s1; char *q = s2; while (*p == *q && *p != '\0') { p++; q++; } return (*p原创 2014-04-11 14:27:14 · 855 阅读 · 0 评论 -
表驱动法算天数
#include int daysPerMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int is_leap_year(int year){ if ((year % 4 == 0) && (year % 400) != 0) { return 1; } return原创 2014-04-29 11:47:00 · 735 阅读 · 0 评论 -
c语言字节对齐
#include //比如按128字节对其#define _ALIGNMENT_ 128#define ALIGNMENT_MASK (_ALIGNMENT_ - 1)int main(void){ int a = 1, b; //将a对齐后的结果给b b = (a + ALIGNMENT_MASK) & ~ALIGNMENT_MASK; print原创 2014-06-26 09:52:09 · 849 阅读 · 0 评论 -
yuv422转420
#include #include #include #include #include #include #include #include //write u or vint32_t wr_u_or_v(int32_t fd, uint8_t *src, int32_t width, int32_t height){ int32_t r, i, j; f原创 2014-06-14 13:14:25 · 901 阅读 · 0 评论 -
为结构体中函数指针赋值的两种方法
#include typedef struct test{ void (*p)(void); void (*q)(void);}test;void f1(void){ printf("1\n");}void f2(void){ printf("2\n");}int main(void){ test aa ={ p:f1, //方法1, .q = f2,原创 2013-08-16 12:00:09 · 5522 阅读 · 0 评论 -
setjmp&longjmp
#include #include jmp_buf env;void banana(void){ printf("in banana\n"); // 表示回到env所记录的位置,此时setjmp返回i(i=2) // 并且调用完成之后env内容被销毁 // 下边的打印不会被执行到 longjmp(env, 2); printf("out原创 2014-06-10 18:47:49 · 512 阅读 · 0 评论 -
二进制图形绘制
#include #define X )*2+1#define _ )*2#define S ((((((((((((((((0 // 用于建立16位宽的图形int main(void){ unsigned short tmp; tmp = S _ _ _ _ _ X X X X X _ _ _ X X _; printf("tmp = 0x%04x\n"原创 2014-06-13 10:07:18 · 2822 阅读 · 0 评论 -
关于符号扩展的问题
#include int main(void){ char test = 0xf1; printf("char :%02x\n", test); printf("unsigned char :%02x\n", (unsigned char)test); return 0;}x原创 2014-05-30 15:04:07 · 966 阅读 · 0 评论 -
获得文件大小
#include int main(int argc, char *argv[]){ if (argc != 2) { printf("Usage %s file\n", argv[0]); return -1; } long file_size = 0; FILE *fp = fopen(argv[1], "r+"原创 2014-07-29 10:17:43 · 706 阅读 · 0 评论 -
malloc_chunk边界标记法和空间复用
ptmalloc分配的空间统一用了malloc_chunk结构来管理,malloc_chunk的结构初看比较奇葩,看了注释,分析了一段时间的代码,发现这种边界标记的设计,在malloc_chunk虚拟地址都是彼此相邻的情况下,是十分高效的。malloc_chunk结构:struct malloc_chunk { INTERNAL_SIZE_T prev_size; /转载 2014-09-18 15:45:26 · 4268 阅读 · 0 评论 -
神一样的sscanf
#include int main(void){ char *str = "hotline=100@192.168.5.179"; char buf[64] = {'\0'}; sscanf(str, "%*[^=]=%[^@]", buf); printf("buf = %s\n", buf); return 0;}原创 2014-10-23 17:14:06 · 682 阅读 · 0 评论 -
my_itoa
#include #include #include #include char *strrev(char *src){ assert(src != NULL); char *head = src; char *tail = src; char tmp; /* tail指向src末尾*/ while (*tail++)原创 2014-03-20 16:35:09 · 627 阅读 · 0 评论 -
浮点数比较
#include #include #define MIN 0.00001char is_equal(double a, double b){ int c; c = abs(a-b); //小于某个精度时候返回1 if (c < MIN) { return 1; } return 0;}int main(v原创 2014-04-30 18:54:30 · 616 阅读 · 0 评论 -
c enum
1. 枚举的定义枚举类型定义的一般形式为: enum 枚举名{ 枚举值表 };在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。例如: 该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。2. 枚举变量的说明如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或转载 2013-08-15 10:29:35 · 908 阅读 · 0 评论 -
do{}while(0)用法
#define MACRO_NAME(para) do{macro content}while(0)的格式,总结了以下几个原因:1,空的宏定义避免warning:#define foo() do{}while(0)2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现:转载 2013-08-16 09:32:49 · 642 阅读 · 0 评论 -
printf
介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。ANSI C标准中有几个标准预定义宏(也是常用的):__LINE__:在源代码中插入当前源代码行号;__FILE__:在源文件中插入当前源文件名;__DATE__:在源文件中插入当前的编译日期__TIME__:在源文件中插入当前编译时转载 2013-08-15 15:35:43 · 724 阅读 · 0 评论 -
关于32位机大文件写测试
#define _LARGEFILE64_SOURCE#include #include #include #include #include #include #include #include #include #define FLG 1char *buf;int errno;void sig_int(int signo){ if (signo ==原创 2013-12-20 11:45:41 · 850 阅读 · 0 评论 -
linux c 查看块设备的大小
#include #include #include #include #include #include #include #include #include #include int main(void){ int fd; //off_t size uint64_t size; int len; int r; if ((原创 2014-02-20 13:41:26 · 4389 阅读 · 0 评论 -
hex to ascii
#include int main(void){ //dec char a = 64; char b[3]; unsigned int x; //b = "64" sprintf(b,"%d", a); //x = 0x64, hex sscanf(b, "%2x", &x); printf("a = %d\原创 2014-03-11 12:56:00 · 679 阅读 · 0 评论 -
ASSERT
下面是一种用户自己定义宏 ASSERT 的方法:#ifdef DEBUGvoid _Assert(char* , unsigned); //原型#define ASSERT(f) \if(f) \ NULL; \else \ _Assert(__FILE__ , __LINE__)#else#define ASSERT(f) NULL#endif从中我们可转载 2014-03-13 16:33:48 · 565 阅读 · 0 评论 -
memcpy
#include void my_memcpy(void *dest, void *src, size_t n){ char *psrc = (char *)src; char *pdest = (char *)dest; assert(psrc != NULL && pdest != NULL); //非空 assert(psrc >= pdest+n |原创 2014-03-13 16:51:53 · 509 阅读 · 0 评论 -
避免奇数地址的方法
//使pb指向4字节的边界上的方法#if 0//e.g.100011#endifwhile ((pb & 3) != 0){ pb++;}原创 2014-03-13 17:23:00 · 927 阅读 · 0 评论 -
错误报警
//解压缩序列的问题char *pbExpend(char *pbFrom, char *pbTo, size_t sizeFrom){ char b, *pbEnd; size_t size; assert(pbFrom != NULL && pbTo != NULL && sizeFrom != 0); pbEnd = pbFrom + sizeFrom;转载 2014-03-14 16:53:37 · 1545 阅读 · 0 评论 -
定义宏来简化gettimeofday的用法
#define declare_shot_clock() \ struct timeval ss_start,ss_end,ss_diff;\/** * 计时开始.用于性能测试. */#define start_shot_clock() \ gettimeofday(&ss_start, NULL);/** * 计时结束.打印从计时开始到计时结束所经过的时间,以毫秒为原创 2014-03-17 19:16:38 · 808 阅读 · 0 评论 -
表驱动法字符分类
#include #include char *type[128] = { [0 ... 47] = "punctuation", [48 ... 57] = "digit", [58 ... 64] = "punctuation", [65 ... 90] = "letter", [91 ... 96] = "punctuation", [原创 2014-04-29 16:35:23 · 780 阅读 · 0 评论 -
tolower
//大写转小写char tolower(char ch){ //明确定义函数的参数 assert(ch >= 'A' && ch <= 'Z'); return (ch + 'a' - 'A');}原创 2014-03-19 17:45:38 · 758 阅读 · 0 评论 -
do not use printf without %s to print a string
Since the printf() function takes strings as arguments, you might think that you do not need the format specifier "%s" while printing a string. Example: int main(){ char string[30]="Hello c转载 2014-10-07 11:26:02 · 802 阅读 · 0 评论