C/C++/java
文章平均质量分 63
向浅
这个作者很懒,什么都没留下…
展开
-
匿名类
java 中匿名类多用出现在UI编程中:在传递监听器时,常常new 一个匿名的监听器类,eg:image.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { ..... }});使用匿名类的好处就是:因为匿名类大多只会使用原创 2013-07-28 13:06:20 · 707 阅读 · 0 评论 -
输入结束的符--空白格的那点小事
0:先引入一个关键字,空白格就是 空格、tab 、回车1、scanf getchargets等输入函数,总是把《enter》回车键在键盘缓冲区中转换成 换行符号‘\n’ (注意回车符和换行符是两个符号,这里只是缓冲区的一个变换处理)2、对于输入函数scanf,scanf 把 空白格(空格、tab、回车)当成是输入输入结束符,同时也意味着用scanf不能输入空白格原创 2013-09-16 22:03:51 · 1133 阅读 · 0 评论 -
程序设计方法(一):结构化、基于对象、面向对象、基于接口
先引入问题:实现一个加法器,加法器中已经保存了被加数,使用加法器的时候,要给他传递一个加数,然后加法器计算并返回相加后的结果;一、结构化程序设计struct SAugend{ int iAugend;};int Add(struct SAugend * pSAugend,int iAddend){ return pSAugend->iAugend + iAdden原创 2013-10-03 16:18:42 · 1338 阅读 · 0 评论 -
程序设计二:基于接口程序设计思想的模板实现、面向方面的程序设计
待写原创 2013-10-03 17:43:30 · 726 阅读 · 0 评论 -
关于C++ 构造函数的那点小事
先列出来c++中所有的构造函数1、默认构造函数和带参数的构造函数 我们暂且称他们为“普通构造函数” .eg Test(); or Test(int i, ...);2、拷贝构造函数Test(const Test & t); 3、类型转换构造函数 Test(int i); 一、普通构造函数1、这里我们主要讲一下默认构造函数的生命周期:即它什么时候会出现?答:通常原创 2013-10-10 10:00:54 · 798 阅读 · 0 评论 -
C 语言中处理四舍五入
float f = 9.9;int a;//eg1:没有处理四舍五入a = f; printf("%d\n",a); // 打印结果为9,错误。C中对于浮点型向整型数据的转换是直接把小数点后面去掉,不会进行四舍五入,所以这要求程序员自己来和处理//eg2:带四舍五入的处理a = (int)(f+0.5);printf("%d\n",a); // 打印结果为10,正确。原创 2013-09-27 21:34:06 · 1480 阅读 · 1 评论 -
消除switch/case语句,不破坏代码的封闭性,使程序结构更符合面向对象思想(一)
一、引入:最近在学习一个执行体库的封装,里面线程间的通信使用的是基于消息循环机制的消息通信。稍微讲下这套通信机制的封装:线程A拥有一个消息队列queue,其他的线程B、C、D...如果想要和线程A通信,就可以向queue中放消息。显然该队列是一个生产者/消费者模型(单读多写)。二、回到主题:好,现在开始考虑:线程A需要处理多种消息类型,而每种消息类型的处理方式可能不同,问题的解决方法最简单原创 2013-10-16 21:59:52 · 2834 阅读 · 0 评论 -
消除switch/case语句,不破坏代码的封闭性,使程序结构更符合面向对象思想(二)
在 “消除switch/case语句,不破坏代码的封闭性,使程序结构更符合面向对象思想(一)”中,我们曾讨论过维护一个消息管理器来记录不同消息和它对应的消息处理类。但是,这种实现方式存在一个问题,考虑下:如果我们项目的业务逻辑很复杂,比如需要处理100多个消息类型,那我们就需要实现100多个消息处理类,维护这么多个消息处理类是相当麻烦的。怎么办?思路:我们只能采取一种折中的方法,即把所有的原创 2013-10-16 22:48:07 · 2190 阅读 · 0 评论 -
面向方法、宏定义、dll库、面向对象给程序灵活性带来的好处
从一个网上找的例子说起:定义了一个ILog接口,用于记录日志文件,它有一个对外接口WriteLog用于记录日志这些日志可以记录到磁盘上(FileLog)或者数据库上(DBLog),或者其它的什么地方;后来,你又发现需要一个StdOutLog,于是你又继承了一个StdOutLog类。各种派生类:DBLog, FileLog, StdOutLog不同的Log创建不同的对象。但对于程序来说他原创 2013-10-25 14:23:18 · 1005 阅读 · 0 评论 -
Linux多线程开发(一):用C++封装线程的互斥操作
学过操作系统的人,估计都知道互斥量是个何方神圣,我这里也就不再狗尾续貂再做解释了好,先看Linux下关于互斥量的一些API(所谓封装,说白了也就是封装这些API,让这些API更简单好用罢了)一、Linux下互斥量的使用1、定义一个互斥量pthread_mutex_t myMutex;2、初始化互斥量pthread_mutex_init( &myMutex, 0); //原创 2013-10-18 22:06:33 · 1435 阅读 · 0 评论 -
Linux多线程开发(二):使用C++封装线程同步操作
互斥量的作用是用来多线程之间互斥排它的访问共享资源(比如一个读一个写等等)多线程操作还有一个重要问题,不用说你也猜的到了:就是线程同步问题线程同步的概念就是:多个线程之间相互协作完成某项任务就是说线程A需要先执行某项操作,执行完后,线程B才能执行。在window中,有个叫做“内核事件”的对象,线程B可以通过调用 WaitForSIngleObject 等函数,使自己进入阻塞状态以等原创 2013-10-18 22:54:26 · 1964 阅读 · 0 评论 -
RTMP_ParseUrl 源代码分析,
RTMP_ParseUrl 源代码分析,// rtsp://192.168.10.100 : 8888 / vlc/avatar.mp4 \0// p col slash end/* 可以记录一种含有杂质的字符串中任何一种数据类型 例如记录url中从哪开始(用av_val区别原创 2014-01-14 10:33:33 · 1201 阅读 · 0 评论 -
汇编机器码分析,同一对象不同字节在内存中的存储位置(大小端讨论)
一、测试环境: vs2008二、测试代码int gi;void main(){ gi = 12;}三、分析:使用VS的发汇编功能,查看上面那段代码的汇编程序(这里主要分析 gi = 12; 这条C语句的反汇编),结果如下: 从反汇编中,我们主要可以得出以下信息:(1)0x00c9138E 是 赋值指令mov的存放地址原创 2014-03-11 09:06:21 · 2245 阅读 · 0 评论 -
通过汇编程序看函数调用过程中的原理
一、C++ 源代码部分int Add(int x,int y){ int sum; sum = x+y; return sum;}int main(int argc, char * argv[]){ int z; z = Add(1,2);}二、反汇编1、函数调用部分:int main(int argc, char * argv[])原创 2014-03-13 21:38:34 · 10085 阅读 · 4 评论 -
理解“指针的指针”
一、关于指针的指针 **p ,最容易想到的用法就是用他来控制指针数组了。还有一种比较犯错却又常用的用法,现在一起来讨论下:二、通过例子来说 这里,我们想要创建一个能够用于动态分配内存的函数,在main函数中调用该方法并传递一个实参,GetMemory分配好内存后,再将该段内存的首地址传给实参void GetMemory(char *p,int num){p=(char*)mall原创 2013-08-23 09:56:53 · 661 阅读 · 0 评论 -
关于计算机中数值的表示的那点小事
一、1、数值在2进制中的表示有3种:原码、反码和补码;这里我只记第3种,因为计算机中,数值的表示只用第3种补码,另外两种用网友的话就是科学家没事吃饱了撑的造出来的(只是开个玩笑,根据哲学中存在比有用的原理,相信他们在其他领域一定还是用的);2、求补码原则:(1)正数补码还是他本身 (2)负数补码,符号位变成1,其他位取负数的绝对值后按位取反再加1 (3)补码中高位进位都直接丢掉3、原创 2013-09-16 21:54:11 · 1099 阅读 · 0 评论 -
java 内部类的作用
内部类的作用:1、内部类的使用,可以保证在客户端上无法查看内部类的实现方法,甚至无法知道内部类的名字等各种信息。(个人感觉是,当你想用java开发一个API 时,为了知识产权的保护,你不想给别人看你API的内部实现方式,此时就可以使用内部类来屏蔽掉这些信息,保证客户端在调用你的API时不知道具体是怎么实现的)2、实现多重继承。在java中只能继承一个类,多重继承的实现是通过接口原创 2013-07-27 12:07:09 · 850 阅读 · 0 评论 -
C 语言中的static
1、静态函数 static C 语言中,静态函数又叫内部函数,用来指明指定的函数只能用于本文件,在其他文件中不能调用。这样做的好处是:不同的人编写不同的函数时,不用担心自己定义的函数是否会与其它文件中的函数同名,因为同名也没有关系。 没有static修饰的函数,是外部函数,C语言中默认的函数都是外部函数,当然也可以用extern关键字指明。原创 2013-08-24 14:23:35 · 653 阅读 · 0 评论 -
(非)守护线程 Daemon thread 的那点小事
一、Daemon thread 的定义 1、在java 中守护线程 daemon thread 的定义是:(1)java 虚拟机必须要等全部的“非守护线程”non-daemon 全部退出,它自己才会退出。(2)如果在 java 虚拟机中只有 守护线程存在,那么java虚拟机会退出。注意:1、main 函数所在线程是非守护线程2、如果main函数结束了,如果此时其他的线程都是原创 2013-08-12 15:23:39 · 1577 阅读 · 0 评论 -
C语言创建柔性数组
typedef struct _soft_array{ int len; int array[]; //这里array仅仅是一个占位符,它不占据存储空间}SoftArray; //P.S. sizeof(SoftArray) == 4SoftArray * create_soft_array(int size){ SoftArray * ret = NULL;原创 2013-08-24 17:07:00 · 594 阅读 · 0 评论 -
(一)线程的创建和启动--java 多线程编程的那点小事
一、创建线程 谈到创建线程,脑子里总会想起这么几个关键字:Runnable、Thread;但他们之间到底是什么关系呢? 1、Runnable:创建线程的目的肯定是要执行一个任务或者说一段业务逻辑。那么我们怎么通知系统这个系统要执行什么样的任务?答案就是:实现Runnable接口的run方法,把业务逻辑写到其中。 (我们可以把Runnable中的run方法比作一份“任务方案书”,现原创 2013-08-12 17:29:23 · 743 阅读 · 0 评论 -
(二)拒绝单一,用不同的方法实现线程--java 多线程编程的那点小事
是不是不管一个线程任务有多简单,都要重新new 一个java class ?当然不是,java 中线程的实现非常灵活,下面就具体讲下如何通过不同的方式来实现一个线程;一、使用“Thread”+“有名内部类”来实现线程public class InnerThread1 { private Inner inner; private class Inner extends T原创 2013-08-13 10:29:51 · 764 阅读 · 0 评论 -
C++ 核心
第一阶段:更好的C语言声明(declaration)任何变量和函数在使用前必须实现声明。(定义也是一种声明方式。对于变量,使用extern关键字强调是声明不是定义;对于函数,可以不使用extern 关键字,不带函数体的函数名连同参数等被认为是函数的声明。)命名空间(namespace)的概念命名空间是为了解决C++中变量、函数命名的冲突而服务的,转载 2013-08-26 10:46:57 · 1147 阅读 · 0 评论 -
C 语言核心
编程模型c语言是系统级编程语言,对于运行时支持的要求最小,本身不提供复杂的数据结构,任何扩展性的功能哪怕是基本的输入输出操作都需要依赖外部库。可以这样讲,C是高级语言中的低级语言,它提供的是某种对机器的最基本的抽象,因此,理解机器本身是理解C语言的核心。下图给出了一个简单的机器抽象,以此来剖析C语言的编程模型。首先是一个负责执行代码的中央处理器抽象。它需要完成所转载 2013-08-26 10:49:52 · 1841 阅读 · 0 评论 -
java 核心
从C++到JavaJava是C系编程语言,许多语法与C、C++相似,对于C/C++开发者来说,入门相当容易,但也更容易忽略其间某些细微的差别,需要特别注意:1. Java成员函数必须在类的内部定义实际上,C++也允许在类的内部给出成员函数的定义,只是由于C++沿用了C语言的include机制,而这种定义方式会导致函数重定义,因此大部分情况下会将成员函数的定义与类转载 2013-08-26 10:52:48 · 750 阅读 · 0 评论 -
(三)线程控制--java 多线程编程的那点小事
线程的控制,所白了就是控制线程间的一些时序问题,下面开始讲可以控制线程时序的几个方法:一、睡眠函数 sleep (1)Thread.sleep(); (2)TimeUnit.XXX.sleep(); 睡眠函数在上一节结束的时候已经讲过了,这里就balabala了二、等待函数 Join join 函数在逻辑上理解起来可能有些绕,其实都怪这个名字起的太烂原创 2013-08-13 11:45:17 · 824 阅读 · 0 评论 -
关于 if,switch,do while ,for 你不知道的那点小事
零,先总结:1、if 语句适用于 按区域进行判断的情形2、switch 适用于离散值进行判断的情形3、一、if 条件语句中要注意的 0、if 条件语句中,真值true 用非0表示;false 用0表示 1、bool 型变量应该直接出现于条件中,不要进行比较;原因是,bool值是由不同的编译器厂商自行定义的;它的值有可能是-1,也有可能是1 或其他,所以bool的原创 2013-09-01 11:33:06 · 871 阅读 · 0 评论 -
循环嵌套,且要求迭代变量互不相等
一段用于暴力破解方程值的代码(方程值的范围已知)为了保证迭代变量互不相等:注意if 条件语句的确定 int a,b,c,d,e; for( a = 0; a < num; a++) { for( b = 0; b < num; b++) { if(a!=b) for( c = 0; c原创 2013-09-10 19:13:25 · 1022 阅读 · 0 评论 -
java byte 类型的 那点小事
一、先从一个判断字符是否为汉字的程序说起public boolean vd(String str){ char[] chars=str.toCharArray(); boolean isGB2312=false; for(int i=0;i<chars.length;i++){ byte[] byte原创 2013-09-04 10:47:06 · 1999 阅读 · 0 评论 -
分析obj文件,理解重定位过程以及obj文件在程序中扮演的角色
一、待分析的程序源代码#include #include typedef void (*TestFunc)();void test(){ printf("hello world!");};int gi = 0x12345678;void test2(){ printf("to prove compiler will generate a code-sec原创 2014-03-27 18:42:43 · 2651 阅读 · 1 评论