自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 资源 (1)
  • 收藏
  • 关注

转载 位运算技巧

一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读《编程之美》求“1的数目”时,我才开始觉得位运算是如此之美,后来读到 《Hacker's Delight》,感慨到Henry S.Warren把位运算运用的如此神出鬼没,很多程序都十分精妙,我觉得在一

2017-02-07 15:55:25 547

转载 动态申请二维数组

方法一:利用二级指针申请一个二维数组。[objc] view plain copy print?#include  #include      int main()  {      intint **a;  //用二级指针动态申请二维数组      int i,j;      int m,n;      p

2017-01-08 19:44:36 1020

原创 指定整数数组中输出和为一整数的所有组合

题目:编写一个函数,在数组a[10] = {1,3,5,7,9,11,13,15,17}中输出和为25的所有整数组合思想:递归,探底一种情况后返回前一种状态。代码:#include #include char a[10] = {1,3,5,7,9,11,13,15,17};char b[10];void f(int n){ static int n1 = 0;

2017-01-02 22:51:40 2029

转载 实现strcpy得分点

一个标准的strcpy函数:原本以为自己对strcpy还算比较了解,结果面试时还是悲剧了。下面给出网上strcpy的得分版本:2分void strcpy( char *strDest, char *strSrc ){  while( (*strDest++ = * strSrc++) != '\0’ );}  

2016-12-21 23:58:42 388

转载 int *ptr=(int *)(&a+1)

int *ptr=(int *)(&a+1)(面试题),有需要的朋友可以参考下。【问题】:请写出以下程序的输出结果。int main(){ int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d\n",*(a+1),*(ptr-1));}【分析】:此题需要理解指针和数组的内在含义。

2016-12-19 10:11:28 1455

转载 带缓冲的I/O操作和不带缓冲的I/O操作

首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进程不提供缓冲功能(但内核还是提供缓冲的)。每调用一次write或re

2016-12-18 23:58:50 1544 1

转载 安全的终止正在运行的线程

转自:[http://creator.cnblogs.com/]最近开发一些东西,线程数非常之多,当用户输入Ctrl+C的情形下,默认的信号处理会把程序退出,这时有可能会有很多线程的资源没有得到很好的释放,造成了内存泄露等等诸如此类的问题,本文就是围绕着这么一个使用场景讨论如何正确的终止正在运行的子线程。其实本文更确切的说是解决如何从待终止线程外部安全的终止正在运行的线程

2016-12-17 23:59:01 461

转载 TCP三次握手和四次挥手

TCP是什么?具体的关于TCP是什么,我不打算详细的说了;当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续。它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。首先来看看OSI的七层模型:我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data

2016-12-15 00:04:20 301

原创 面试题

char *getmemory(void){char p[] = “hello world”;return p;}void test(void){char *str = NULL;str = getmemory();printf(“%s\n”,str);   }请问运行Test会有什么样的结果?A. 出错B. 输出“hello world”C

2016-12-13 00:15:24 447

转载 Linux下的段错误分析

2.段错误产生的原因 2.1 访问不存在的内存地址#include#includevoid main(){int *ptr = NULL;*ptr = 0;}2.2 访问系统保护的内存地址#include#includevoid main(){int *ptr = (int *)0;*ptr = 100;}

2016-12-11 23:55:28 788

转载 函数中返回字符串的方法

有四种方式:1。使用堆空间,返回申请的堆地址,注意释放2。函数参数传递指针,返回该指针3。返回函数内定义的静态变量(共享)4。返回全局变量 ******************以下摘自csdn****************************** 其实就是要返回一个有效的指针,尾部变量退出后就无效了。 使用分配的内存,地

2016-12-10 23:58:43 860

原创 字符串题目-strstr()

字符串函数strstr(char *s1,char *s2)是返回字符串s1中首次出现s2的地址函数实现:char *my_strstr( char *s1, char *s2){ if(*s2 == '\0') { return NULL; } char *a = s1; char *b = s1; char *c = s2; while(*a != '\

2016-12-09 23:22:29 474

转载 费式数列

Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产)......。 如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生产,类似的道理也可以用于植物的生长,这就是Fibonacci数列,一般习惯

2016-12-08 23:22:15 658

转载 作式堆分析和实现

介绍:定义:     左式堆(Leftist Heaps)又称作最左堆、左倾堆,是计算机语言中较为常用的一个数据结构。左式堆作为堆的一种,保留了堆的一些属性。第1,左式堆仍然以二叉树的形式构建;第2,左式堆的任意结点的值比其子树任意结点值均小(最小堆的特性)。但和一般的二叉堆不同,左式堆不再是一棵完全二叉树(Complete tree),而且是一棵极不平衡的

2016-12-07 23:40:09 674

转载 二项队列分析及实现

定义:     二项队列不同于左式堆和二叉堆等优先队列的实现之处在于,一个二项队列不是一棵堆序的树,而是堆序树的集合,即森林。堆序树中的每棵树都是由约束形式的,叫做二项树。每一个高度上至多存在一棵二项树。高度为0的二项树是一颗单节点树,高度为k的二项树Bk通过将一棵二项树Bk-1附接到另一颗二项树Bk-1的根上而构成。下图显示二项树B0,B1,B2,B3以及B4。

2016-12-06 16:00:39 2022 1

转载 函数变相做到返回多个值的方法

2方法1:利用全局变量      分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。

2016-12-05 23:25:01 669

转载 字符串逆序(多种解法)

普通逆序基本上没有这么考的,放在这里主要是为了和后面的原地逆序做个对比。很简单,直接分配一个与原字符串等长的字符数组,然后反向拷贝一下即可。char* Reverse(char* s){ //将q指向字符串最后一个字符 char* q = s ; while( *q++ ) ; q -= 2 ; //分配空间,存储逆序后的字符串。

2016-12-04 23:39:03 3624

转载 B-树详细分析及B树B-树B+树B*树概念

B- 树是为了磁盘或其它存储设备而设计的一种多叉(下面你会看到,相对于二叉,B树每个内结点有多个分支,即多叉)平衡查找树。B- 树又叫平衡多路查找树。一棵m阶的B 树 (m叉树)的特性如下:树中每个结点最多含有m个孩子(m>=2);除根结点和叶子结点外,其它每个结点至少有[ceil(m / 2)]个孩子(其中ceil(x)是一个取上限的函数);若根结点不是叶子结点,则至

2016-12-03 11:04:57 25605 5

转载 AVL树介绍与实现

AVL树的介绍AVL树是根据它的发明者G.M. Adelson-Velsky和E.M. Landis命名的。它是最先发明的自平衡二叉查找树,也被称为高度平衡树。相比于"二叉查找树",它的特点是:AVL树中任何节点的两个子树的高度最大差别为1。 (关于树的高度等基本概念,请参考"二叉查找树(一)之 图文解析 和 C语言的实现 ")上面的两张图片,左边的是AVL树,

2016-12-02 22:51:01 505

转载 char a[](字符串数组)和char *a(字符串指针)区别

在C语言中,对字符串的操作主要有两种方式,一是使用字符数组,char str[];二是使用字符指针。那么二者有什么区别呢?下面将分述二者的使用,最后进行比较。一、字符数组        使用char str[]定义一个字符数组str,中括号内可以写上数字表示数组大小,也可以不写。如果不写数字,则必须为字符数组提供初始值,以便编译器进行内存分配。可以使用字符串字面

2016-12-01 23:09:21 6622

转载 进程与线程的区别

(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源(4)系统开销:由于在创建或撤销进程时,操作系统为此所付出的开销将显著地大于在创建或撤消线程时的开销。类似的。进程切换的开销也远大于线程切换的开销。

2016-11-30 23:41:39 288

转载 (x&y) + ( (x^y)>>1 )位运算求平均数

对于位运算求两个数的平均值问题,(整形数据)int average(int x,int y){return ( (x&y) + ( (x^y)>>1 ) );}12341234给出两个整数,求出结果。 刚开始看到这道题的做法就是x和y转换为二进制,然后计算出结果。在没有办法的情况下这样做也可以得出结果。跟你想象的一点不差,这里确实有捷径。题目中的&和^都是位

2016-11-29 17:24:07 344

转载 经典算法题--河内之塔

1.河内之塔说明河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金

2016-11-28 22:31:36 389

转载 基数排序(链表运用)

基于两两比较的算法,算法的运行下界为Ω(nlogN),如果想再降低时间复杂度,只能通过其他的非基于比较的方法。基数排序就是一种方法,其时间复杂度为O(N)基数排序的过程,假设有4个数,我们用链表把他们连一起,这4个数为321  892   538  439第一步:我们先创建10个链表,L0~L9,然后按4个数的个位的数字,依次接到相应链表的后面L0 

2016-11-27 23:01:04 861

转载 vim改装成IDE编程环境

1写在前面 Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用的IDE是何等的重要啊, 估计很多人就是卡在这个门槛上了, "工欲善其事, 必先利其器"嘛, 我想如果有一个很好用的IDE, 那些Linux牛人也会欢迎的. 这都是劳动人民的美好愿望罢了

2016-11-26 22:28:46 379

转载 算法运行时间

1 大部分程序的大部分指令之执行一次,或者最多几次。如果一个程序的所有指令都具有这样的性质,我们说这个程序的执行时间是常数。 logN  如果一个程序的运行时间是对数级的,则随着N的增大程序会渐渐慢下来,如果一个程序将一个大的问题分解成一系列更小的问题,每一步都将问题的规 模缩减成几分之一 ,一般就会出现这样的运行时间函数。在我们所关心的范围内,可以认为运行时间小于一个大的常数

2016-11-25 21:58:53 315

转载 验证大小端模式

大端字节序:高字节存放在低地址,低字节存放在高低址小端字节序:低字节存放在高低址,高字节存放在低地址大小端字节顺序它是CPU的属性,所哟不同的CPU的大小端字节顺序也不同,移植的时候需要先判断当前的CPU是大端还是小端字节序,如果不同则移植需要转移字节序int num = 0x12345678 大端

2016-11-24 23:26:54 1253 1

转载 文件读写:fwrite与fprintf的区别(即二进制方式和文本方式的区别)

C语言把文件看作一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为ASCII文件和二进制文件。ASCII文件又称为文本(text)文件,它的每个字节放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内在中的存储形式原样输出到磁盘上存放。fprintf(fp, "%d", buffer); 是将格式化的数据写入文件fprintf(

2016-11-23 23:32:51 16168 7

转载 C语言中,malloc和free深入理解

在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用—— 就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以 写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助

2016-11-22 23:15:48 783

转载 linux下文件乱码问题及编码方式

Linux下对文件操作经常会遇见乱码问题,我在网上搜了一些解决方法,希望能对大家有所帮助。如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。查看文件编码 在Linux中查看文

2016-11-21 23:50:15 3746 1

转载 操作系统进程调度算法

一、先来先服务和短作业(进程)优先调度算法1.先来先服务调度算法先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入

2016-11-19 23:46:10 519

转载 C编译过程简介

前几天看了《程序员的自我修养——链接、装载与库》中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧。我现在一般都是用gcc,所以自然以GCC编译hellworld为例,简单总结如下。 hello.c源代码如下:?[Copy to clipboard]View Code C123456

2016-11-18 23:58:33 646

转载 linux下几种IPC通行方式比较

这个系列基本上到现在为止已经差不多把linux上的各种常用的IPC介绍完了,linux上面的IPC大多都是从UNIX上面继承而来。        最初Unix IPC包括:管道、FIFO、信号。System V IPC包括:System V消息队列、System V信号灯、System V共享内存区。由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix标准,这个新的A

2016-11-17 23:27:18 1139

转载 C语言位运算妙用

位运算应用口诀清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或移位运算要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。     2 "     3 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。     4 ">>>"运

2016-11-16 23:09:41 499

转载 C和C++中struct和typedef struct的分析

分三块来讲述:  1 首先://注意在C和C++里不同    在C中定义一个结构体类型要用typedef:    typedef struct Student    {    int a;    }Stu;    于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)    这里的Stu实际上就是

2016-11-15 22:31:51 228

转载 函数可重入性(Reentrancy)

1.什么是可重入性重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。可重入的函数必须满足以下三个条件:(1)可以在执行的过程中可以被打断;(2)被打断之后,在该函数一次调用执行完之前,可以再次被调用(或进入,reentered)。(3)再次调用执行完之后,被打断的上次调用可以

2016-11-14 23:22:59 421

原创 C语言清空输入缓冲区

先来看一段代码:#include int main(){ int num; char ch ; scanf("%d", &num); scanf("%c", &ch); printf("hello world\n"); system("pause"); return 0;}设想输入一个数字和一个字母,应该出现如下情况1ahello

2016-11-14 00:08:21 32494 4

转载 C条件编译在软件开发中的运用

这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。    条件编译命令最常见的形式为:    #ifdef 标识符    程序段1    #else   

2016-11-11 23:08:27 448

转载 C语言中返回错误信息的相关函数用法总结定义函数

这篇文章主要介绍了C语言中返回错误信息的相关函数用法总结,包括strerror()函数和perror()函数以及ferror()函数的使用,需要的朋友可以参考下C语言strerror()函数:返回错误原因的描述字符串头文件:#include 定义函数:char * strerror(interrnum);函数说明:strerror()用来依参数errnum 的错

2016-11-10 23:44:50 2793

转载 C中enum用法

如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。   举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它!enum box{pencil,pen};//这

2016-11-08 23:35:45 1064

蓝牙HC-05原理图、封装

HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作 模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave) 和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定 的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有AT 命令,用户可 向模块发送各种AT 指令,为模块设定控制参数或发布控制命令。通过控制模块外部引脚 (PIO11)输入电平,可以实现模块工作状态的动态转换。

2018-01-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除