C语言
逐影Linux
不成魔自成狂。
展开
-
杂记之C语言实现复制函数strcpy和strcnpy
char *strcpy(char *strDest, const char *strSrc){ assert((strDest!=NULL) && (strSrc !=NULL)); //捕获异常,进行出错处理; char *address = strDest; while( (*strDest++ = * strSrc++)原创 2012-11-06 09:09:33 · 1298 阅读 · 0 评论 -
杂记之C语言之结构(三)
结构的自引用(1)struct SELF_REF1 { int a; struct SELF_REF1 b; int c; };这种类型的自引用是非法的,有点像永不原创 2012-12-17 10:20:39 · 344 阅读 · 0 评论 -
杂记之C语言之结构(四)
不完整的声明其中一个结构包含另一个结构的一个或多个成员,和自引用一样,至少有一个必须在另一个结构内部以指针的形式存在。问题在于声明部分:如果每个结构都引用了其他结构的标签,哪个结构的标签,哪个结构应该首先声明呢?这个问题的解决方案是使用不完整声明。struct B;//不完整的声明,即未完整声明完整。struct A{ struct B *原创 2012-12-17 12:33:19 · 303 阅读 · 0 评论 -
杂记之C语言之结构(五)
结构的初始化结构的初始化方式和数组的初始化很相似。一个位于一对花括号内部、由逗号分隔的初始值列表可用于结构各个成员的初识化。这些值根据结构成员列表的顺序写出。如果初始列表的值不够,剩余的结构成员将使用缺省值进行初始化。例如:struct INIT_EX{ int a; short b[10];原创 2012-12-17 12:40:06 · 328 阅读 · 0 评论 -
杂记之C语言之左值和右值
C/C++语言中可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量。左值表示存储在计算机内存的对象,而不是常量或计算的结果。或者说左值是代表一个内存地址值,并且通过这个内存地址,就可以对内存进行读并且写(主要是能写)操作;这也就是为什么左值可以被赋值的原因了。相对应的还有右值:当一个符号或者常量放在操作符右边的时候,计算机就读取他原创 2012-12-17 21:01:32 · 458 阅读 · 0 评论 -
一段代码为安身!(2)
/**coder: H-H.Z**//**date: 12.12.9**/ //调试过程中易出现将按位与“|”写错成“||”#include void main(void){ unsigned char uData = 0xaa;//1001 1011 unsigned char uMask = 0; unsigned char temp=1; unsigned char原创 2012-12-09 21:24:05 · 304 阅读 · 0 评论 -
整数与字符串的相互转换
相关链接:http://hi.baidu.com/sunfengwei/item/c3f6e1420d37ab94833ae1c5atof(将字符串转换成浮点型数)相关函数 atoi,atol,strtod,strtol,strtoul表头文件 #include 定义函数 double atof(const char *nptr);原创 2013-05-02 21:04:59 · 903 阅读 · 0 评论 -
杂记之C语言之auto与static,const
//static在代码块中具有“累加”的功能,只需初始化一次,普通变量(缺省为自动变量)在函数中为初始化状态,即每次都重新初识化。#include #include int sum( int a ){ auto int c = 0; static int b = 2; c += 1; b += 3; return ( a + b + c );原创 2012-11-12 12:11:28 · 682 阅读 · 0 评论 -
杂记之51单片机哪些破事---数据类型(一)
面向51单片机的Keil uVision4基本数据类型简介资料来源:http://www.21ic.com/app/mcu/201208/138380_2.htm原创 2012-11-13 20:43:17 · 432 阅读 · 0 评论 -
一些书
《C++ Templates》《Rumination on C++》《C Traps and Pitfalls》(已买)(已阅)《Expert C Programming》《Pointers on C》(已买)(阅读ing)《Unix环境高级编程》(已买)(阅读ing)原创 2012-12-07 22:25:07 · 416 阅读 · 0 评论 -
杂记之break,continue,goto语句的使用
1、break语句 --跳出switch语句块或跳出循环体如for,只能跳出最内层循环2、continue语句 --语句也会终止当前循环,和break语句不同的是 continue语句终止当前循环后又回到循环体的开头准备执行下一次循环。3、goto语句 for(...) for(...) {原创 2012-11-03 23:56:36 · 388 阅读 · 0 评论 -
杂记之算法分析
在分析算法的时间复杂度时,我们更关心最坏情况而不是最好情况理由如下:(1)最好情况给出了算法执行时间的上界。(2)对于某些算法,最坏情况是最常发生的情况,例如在数据库查找某个信息的算法,最坏的情况就是数据库中根本不存在该信息,全部找遍了也没有,而某些应用场合经常要查找一个信息在数据库中是否存在。笔记摘自《Linux C 编程 一站式学习》.宋劲杉 编著原创 2012-11-05 09:30:43 · 347 阅读 · 0 评论 -
关于取地址和引用
引用:int q = 5;int &p = q; //p = 5, q= 5;p = 3; //p=3, q = 3;取地址:int q = 5, p; p = &q;//p = 5, q= 5;p = 3; // p =3, q = 5;原创 2013-09-15 23:24:36 · 503 阅读 · 0 评论 -
gcc 后出现的error和warming 修改(更新中)
1. error:expected primary-expression before 'unsigned'有可能是 unsigned 前面的 符号 是全角型,而不是 半角型。2. error: invalid conversion from ‘const void*’ to ‘void*’多半是 字符串的问题,比如pthread_cleanup_push(clean原创 2013-07-20 16:13:44 · 4936 阅读 · 0 评论 -
函数指针的使用--回调函数
引自《openssl 编程》/*random.h*/#ifndef RANDOM_H#define RANDOM_Htypedef int callback_random(char *random, int len);void set_callback(callback_random *cb);int genarate_random(char *random, int len);#e原创 2013-09-01 17:53:41 · 747 阅读 · 0 评论 -
关于memset的使用
typedef struct Test_{ int *p;}Test;int main(int argc, char** argv){ Test* test = (Test *)malloc(sizeof(Test)); test->p = (int *)malloc(sizeof(int)); *(test->p) = 2; free(原创 2013-09-15 23:15:00 · 1515 阅读 · 0 评论 -
链表实现
#include #include #include "List.h"int (*str_cmp)(const void* data1, const void* data2);int str_cmp_string(const char* data1, const char* data2){ return strcmp(data1, data2);}int str_c原创 2014-08-28 21:44:42 · 580 阅读 · 0 评论 -
杂记之C语言之函数scanf的使用
int main(){ int *array; int n_values; int i; /*观察共有多少个值*/ printf("How many values are there ?"); if(1!=scanf("%d",&n_values) || n_values <= 0) { printf("Illegal number of values.\n"原创 2012-12-16 10:30:26 · 336 阅读 · 0 评论 -
杂记之C语言之结构(二)
结构成员的直接访问声明struct COMPLEX comp;结构成员是通过点操作符(.)访问的。((comp.sa)[4]).c下标引用和点操作符具有相同的优先级。他们的结合性都是从左向右,可以省略所有的括号。即comp .sa[4].c结构成员的间接访问如果拥有一个指向结构的指针,首先对指针执行间接访问操作,这使你获得这个操作。然后使用点操作符来访问它的成原创 2012-12-16 21:45:47 · 310 阅读 · 0 评论 -
杂记之对位操作--掩码的使用
掩码如果要对一个整数中的某些位进行操作,怎样表示这位整数中的位置呢?可以用掩码(mask)来表示。比如掩码0x0000ff00表示对一个32位整数的8~15位进行操作举例如下:1 .取出8~15位 unsigned int a,b,mask=0x0000ff00; a=0x12345678; b=(a&mask)>>8;原创 2012-11-03 23:42:58 · 807 阅读 · 0 评论 -
杂记之C语言之ASCII码中的转换
/*将一串数字转化为相应的数值,比如"123456“=>123456int atoi:convert s to integer*/int atoi(char s[ ]){ int i,n; n=0; for(i = 0;s[i] >= '0' && s[i] n = 10*n + (s[i]-'0')原创 2012-11-07 10:39:48 · 1576 阅读 · 0 评论 -
杂记之C语言之条件真假判断
1、不可将布尔变量直接与TRUE、FALSE 或者1、0 进行比较。假设布尔变量名字为flag,它与零值比较的标准if 语句如下:假设布尔变量名字为flag,它与零值比较的标准if 语句如下:if (flag) // 表示flag 为真if (!flag) // 表示flag 为假2、应当将整型变量用“==”或“!=”直接与0 比较。(常规写法)假设整型变量的名字为valu原创 2012-11-07 11:51:00 · 4679 阅读 · 0 评论 -
杂记之C语言之指针(一)
//#用指针注意两点。1.初始化 2、空指针、野指针和void 型指针/*不能出现野指针,可以出现空指针和void 型指针,空指针不能访问。 void 型指针只有通过强制类型转换后才可以访问,否则也不能访问 */#includeint main(void){ int i; int *pi=&i;//表示定义一个指向int型的变量指针pi,并用i的地址(为一常数)来初始化p原创 2012-11-06 08:59:37 · 414 阅读 · 0 评论 -
杂记之C语言的转义字符
\t table 水平制表符,一个table键的位置\b backspace,退格键\r enter 换行符\n next 换行符\ddd ddd 表示1~3个八进制数字,这个转义符表示的字符就是给定的八进制数值所代表的字符。\xddd 与上例类似,只是八进制换成了十六进制。原创 2012-11-11 22:55:18 · 476 阅读 · 0 评论 -
杂记之库函数scanf
参考自:http://blog.sina.com.cn/s/blog_5e8facd20100lqqg.html scanf只能将缓冲区中的数字(使用了%d)读入iCmdNum,并清空缓冲区,而我们输入的是非数字,那么scanf读入失败,失败了它也就不会去清空缓冲区,这样造成的结果就是,我们不需要再输入其它字符,scanf每次都会去读缓冲区,每次都失败,每次都不会清空缓冲区,当下次再来读时原创 2012-12-08 15:10:56 · 430 阅读 · 0 评论 -
杂记之库函数getchar
该函数的原型 int getchar(void) 在常见的c编译器里面,char类型取值范围为[-128, 127],类似EOF等宏的值则在此取值范围之外,那么EOF将不会被正确地读入,那么 char c= getchar();则是一个隐藏很深的bug。在这里我们将接受输入值的变量定义为int。通常写法: iCmdN原创 2012-12-08 15:37:54 · 321 阅读 · 0 评论 -
杂记之C语言之无限循环
嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?汇编代码 -- 在vc6.0中生成相应语句的汇编代码 DEBUG模式 //死循环 for (;;) { x = 1; } while (true) { x = 1; }对应的汇编语句为: $L270:; 对于for的真循环,没有判断语句,直接执行for循环体内数据; x = 1原创 2012-11-13 21:29:31 · 3645 阅读 · 0 评论 -
杂记之C语言之关键字volatile和static
a)关键字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者文字描述)。 volatile这个词的英文解释为挥发性 用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里重新读取它的值,并不要随意针对它作优化。建议使用volatile变量的场所:(1) 并行设备的硬件寄存器(2) 一个中断原创 2012-11-07 15:18:16 · 716 阅读 · 0 评论 -
杂记之C语言实现C++函数strstr
//来源于百度百科/*包含文件:string.h 函数名: strstr 函数原型:extern char *strstr(char *str1, char *str2); 功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。 返回值:返回该位置的指针,如找不到,返回空指针。*///修改为mystrstr实现str原创 2012-11-05 12:47:37 · 1285 阅读 · 0 评论 -
杂记之C语言函数strlen和操作符sizeof
头文件:string.h 格式: strlen (字符数组名) 功能: strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串 结束符'\0'为止,然后返回计数器值。所以说 计算字符串s的(unsigned int型)长度,不包原创 2012-11-07 15:35:49 · 577 阅读 · 0 评论 -
杂记之C语言之域宽和精度(更新中)
试题转载自http://blog.csdn.net/hackbuteer1/article/details/7926592#comments1、int main(void) { printf("%s,%5.3s\n","computer","computer"); return 0; } A、computer , puter原创 2012-11-04 00:48:44 · 3326 阅读 · 0 评论 -
杂记之函数qsort的使用
qsort函数简介 功 能: 使用快速排序例程进行排序 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序原创 2012-12-16 11:01:45 · 330 阅读 · 0 评论 -
杂记之内存分配实例
动态内存分配的一个常见用途就是为那些长度在运行时才知的数组分配内存空间。sort.c/*内存分配实例*//*读取一列整数、升序排序和打印一列整型值*/#include#includeint compare_integers(void const *a, void const *b){ register int const *pa=a; register i原创 2012-12-16 11:19:00 · 500 阅读 · 0 评论 -
杂记之变量的存储布局
#include const int A=10; /*变量A用const修饰,表A为只读,不可修改(如果重新赋值,编译器会报错),位于.rodata段*/int a=20; //a是全局变量,位于.data段static int b=30;//b被static关键字修饰,为局部符号,作用域为某一目标文件中使用,位于.data段int c; //原创 2012-11-05 09:16:48 · 405 阅读 · 0 评论 -
杂记之库函数memset()
百科名片:http://baike.baidu.com/view/982208.htm需要的头文件 在C中 在C++中 函数介绍 void *memset(void *s,int ch,size_t n); 函数解释:将 s 中前 n 个字节用 ch 替换并返回 s 。 将s所指向的某一块内存中的每个原创 2012-12-23 17:28:58 · 519 阅读 · 0 评论 -
Linux下的时间计算及所在文件所在行打印
#include #include //sleep函数#include #define TL_MSG(p) \{ \ time_t timeval; \ timeval = time(NULL); \ FILE *log; \ log = fopen("log.txt","a");\ fprintf(log, "%s:%d | the原创 2013-07-31 00:10:28 · 829 阅读 · 0 评论