随笔分类 -  C

摘要:/* ************************************************************************ * Filename: link.c * Description: * Version: 1.0 * Created: 2011骞?4鏈?9鏃?17鏃?2鍒?3绉? * Revision: none * Compiler: gcc * Author: wen hao (WH), hnrain1004@gmail.com * Company: sunplusapp * *************************************** 阅读全文
posted @ 2011-04-29 14:12 hnrainll 阅读(1405) 评论(0) 推荐(0)
摘要:/* ************************************************************************ * Filename: test.c * Description: 将10进制数转换成为其他任意进制数 * Version: 1.0 * Created: * Revision: none * Compiler: gcc * Author: wen hao * Company: * ************************************************************************/#include 阅读全文
posted @ 2011-04-29 10:41 hnrainll 阅读(621) 评论(0) 推荐(0)
摘要:很多时候我们需要在程序退出的时候做一些诸如释放资源的操作,但程序退出的方式有很多种,比如main()函数运行结束、在程序的某个地方用exit() 结束程序、用户通过Ctrl+C或Ctrl+break操作来终止程序等等,因此需要有一种与程序退出方式无关的方法来进行程序退出时的必要处理。方法就 是用atexit()函数来注册程序正常终止时要被调用的函数。 atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。atexit()的函数原型是:int atexit (void (*)(void)); 在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的 阅读全文
posted @ 2011-04-25 08:38 hnrainll 阅读(485) 评论(1) 推荐(0)
摘要:转自:http://www.cnblogs.com/super119/archive/2011/03/26/1996145.htmlfunc是一个函数指针,该函数返回值是int,没有输入参数;然后主程序中声明了一个函数指针myFuncPointer,该函数指针代表的函 数输入参数是一个int,返回值也是一个函数指针,类型就是func类型的。所以我们可以把func2这个函数赋给myFuncPointer这个指针。 interview的题目要的就是myFuncPointer这个指针的声明。 //add by wenhao //20110422 添加注释#include <stdio.h> 阅读全文
posted @ 2011-04-22 20:01 hnrainll 阅读(2624) 评论(0) 推荐(0)
摘要:1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:void a; 这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void a的编译不会出错,它也没有任何实际意义。 voi 阅读全文
posted @ 2011-04-20 13:24 hnrainll 阅读(427) 评论(0) 推荐(0)
摘要:概述 在很多情况下,尤其是读别人所写代码的时候,对 C语言声明的理解能力变得非常重要,而C语言本身的凝练简约也使得C语言的声明常常会令人感到非常困惑,因此,在这里我用一篇的内容来集中阐述一下这个问题。 问题:声明与函数 有一段程序存储在起始地址为 0的一段内存上,如果我们想要调用这段程序,请问该如何去做? 答案 答案是 (*(void (*)( ) )0)( )。看起来确实令人头大,那好,让我们知难而上,从两个不同的途径来详细分析这个问题。 答案分析:从尾到头 首先,最基本的函数声明: void function (paramList); 最基本的函数调用: function(paramLis 阅读全文
posted @ 2011-04-20 10:12 hnrainll 阅读(505) 评论(0) 推荐(0)
摘要:vivi_Makefile分析笔记:#定义vivi版本信息,vivi版本号为0.1.4VERSION = 0PATCHLEVEL = 1SUBLEVEL = 4VIVIRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)#定义目标平台体系结构,目标平台体系结构是ARM.#"="和":="都是给变量赋值,使用":="的作用是立即把定义中参考到的函数和变量都展开.如果使用"=",函数#和变量参考会留在那里,就是说改变一个变量的值会导致其他变量的值也被改变.见教材P32.ARCH := 阅读全文
posted @ 2011-04-14 08:02 hnrainll 阅读(516) 评论(0) 推荐(0)
摘要:sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。函数原型:int scanf( const char *format [,argument]... );其中的format可以是一个或多个:{%[*] [width] [{h|l|I64|L}] type|'_'|'\t'|'\n'|非%符号},注:{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。² width:宽度,一般可以忽略,用法如:const char sourceStr[] = "hel 阅读全文
posted @ 2011-04-13 19:06 hnrainll 阅读(1194) 评论(0) 推荐(0)
摘要://功能:在s1中如果不能找到s2,则返回"Substring is not found.\n",反之.#include <stdio.h>int find_substr(char *s1, char *s2);//函数声明void main(){ if(find_substr("C is fun","un") != -1) { printf("Substring is found.\n"); } else { printf("Substring is not found.\n"); }}int find_substr(char *s1, char *s2){ int t; c 阅读全文
posted @ 2011-02-18 23:40 hnrainll 阅读(287) 评论(0) 推荐(0)
摘要://实例4 函数的引用调用#include <stdio.h>void swap(int *x, int *y);//函数申明void main(){ int i, j;//定义两个变量 i = 12;//给变量赋初值 j = 36; printf("i and j before swapping: %d %d\n", i,j); swap(&i, &j); printf("i and j after swapping: %d %d\n", i, j);}void swap(int *x, int *y)//交换函数, 参数为两个指针变量{ int temp;//定 阅读全文
posted @ 2011-02-18 00:50 hnrainll 阅读(431) 评论(0) 推荐(0)
摘要://实例3 指针操作符#include <stdio.h>void main(){ int *p;//定义一个指针变量 int begin, end;//定义两个整形变量 begin = 10;//给变量赋初值 p = &begin;//让P指向begin end = *p;//将p指向的地址中的数据赋值给end printf("begin = %d\n", begin); printf("end = %d\n", end);} 阅读全文
posted @ 2011-02-18 00:18 hnrainll 阅读(243) 评论(0) 推荐(0)
摘要://实例2 关系和逻辑运算#include <stdio.h>void main(){ int logic; int a = 1; int b = 2; int c = 3; logic = a + b > c && b <= c;//首先计算a+b是3不大于c,为假,就不会计算后面了,输出0 printf("logic = %d\n", logic); logic = a >= b + c || b == c;//b+c是5,a是小于5的,为假;输出0 printf("logic = %d\n", logic); logic = !(a < 阅读全文
posted @ 2011-02-18 00:12 hnrainll 阅读(255) 评论(0) 推荐(0)
摘要://实例1 数据类型转换 #include void main() { int a = 5;//定义一个整形变量 char c = 'a';//定义一个字符型变量 float f = 5.3;//定义一个浮点数 double m = 12.65;//点以一个双精度实型变量 double result;//定义一个双精度实型变量 printf("a + c = %d\n", a... 阅读全文
posted @ 2011-02-17 23:38 hnrainll 阅读(540) 评论(0) 推荐(0)
摘要:break语句,用于永久终止循环.在执行完break语句之后,执行的下一条语句就是循环正常结束后该执行的那条语句. continue语句,它用于永久的终止当前的那次循环.在执行完continue语句之后,执行接下来的就是重新测试表达式的值,决定是否断续执行循环. 阅读全文
posted @ 2011-02-12 16:25 hnrainll 阅读(374) 评论(0) 推荐(0)
摘要:转自:http://blog.chinaunix.net/space.php?uid=22889411&do=blog&id=59667 曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。 我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还... 阅读全文
posted @ 2011-01-16 00:54 hnrainll 阅读(2926) 评论(0) 推荐(2)
摘要:编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。 第 1 招:以空间换时间 计算机程序中最大的矛盾是空间和时间的矛盾,那么从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。 例如:字符串的赋值。 方法 A,通常的办法: #define LEN 32 char string1 [LE... 阅读全文
posted @ 2010-12-25 14:31 hnrainll 阅读(541) 评论(0) 推荐(1)
摘要:一、前言 “程序设计”的真谛是什么?许多初学者的理解是“写代码”。但是,在匠人看来,把“程序设计”理解为“写代码”,就像把“电路设计”理解为“画PCB”一样。 新手们苦恼的问题是,他们只会“写代码”。他们一接到新的项目,总是在第一时间就爬到键盘上去敲代码。新手们的精力总是比较旺盛,他们加班加点,两天就把所有代码敲完。然后他们会用十倍或几十倍以上的时间去调试,中间伴随着几次三番的推倒重来。最后,他们... 阅读全文
posted @ 2010-12-25 12:41 hnrainll 阅读(479) 评论(0) 推荐(0)
摘要:今天写一个PIC单片机的程序,出现一个问题:uint16 adres = 0x00; float adre;adre = adre * 1000;adres = (uint)adre;如果是按上面的写法没有问题,但是如果这样写出就问题了,如下:uint16 adres = 0x00; float adre;adres = (uint)dre * 1000;还不明白为什么先把问题留在这里! 阅读全文
posted @ 2010-12-15 00:56 hnrainll 阅读(463) 评论(0) 推荐(0)