自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (5)
  • 问答 (2)
  • 收藏
  • 关注

原创 二级指针、数组指针、二维数组、指针数组作为函数形参时可传入的实参

1、传参规则:a.当二级指针作为函数形参时,能作为函数实参的是二级指针,指针数组,一级指针的地址 b.当数组指针作为函数形参时,能作为函数实参的是二维数组,数组指针 c.当二维数组作为函数形参时,能作为函数实参的是二维数组,数组指针 d.当指针数组作为函数形参时,能作为函数实参的是指针数组,二级指针,一级指针的地址2、实例验证:#include <stdio.h>#include <stdl

2016-08-10 00:53:57 10167 2

原创 C语言extern与static修饰变量

extern和static在C语言里面的作用这里就不做过多的阐述了,下面直接通过一个小程序来看一看他们修饰的变量的特性。#include <stdio.h>int count = 3;int main(){ int i = 0, count = 2, sum = 0; for (i = 0; i < count; i += 2, count++) { sta

2016-08-09 11:15:28 1110

原创 浅析Linux开发工具之Makefile

一、什么是Makefile 在windows平台下,有很多的IDE供我们使用,我们不会去考虑怎么把一个很大的工程编译链接为一个可执行程序,因为这些事IDE都为我们做了,而在Linux平台下,我们并没有这么高端的IDE供我们使用,所以为了在Linux平台下能很好的编译链接大型的项目,我们必须要学会使用Makefile,是否能很好的使用Makefile也从侧面体现了一个Linux程序员是否是合格的能开

2016-07-02 02:49:16 1134

原创 Linux文件的三种时间属性

一、Linux文件时间属性的分类 我们在用windows系统时,在查看磁盘文件时,经常会看到文件或目录的后面有一个时间信息,这个是文件在磁盘上别创建的时间。其实,在windows系统中,文件还有文件的修改时间、访问时间两个时间属性。在linux系统中,文件同样有时间属性,不过Linux文件的时间属性与windows略有不同,它的时间属性分为; 1、访问时间(atime->access t

2016-07-02 01:03:50 4755 2

原创 Linux权限的简单剖析

一、权限是什么 权限(privilege)是指某个特定的用户具有特定的系统资源使用权力。举个简单的例子,夏日炎炎,你看到路边有卖西瓜的,你想要吃西瓜,你就得买它,买它其实就是获取你对西瓜的使用权限,买了它,你就可以大快朵颐了。二、Linux的文件权限 Linux的文件权限主要体现在的两个方面,文件的访问者即文件的事物属性。 1、文件访问者 a)文件和文件目录的所有者:u—User b)文件

2016-07-01 03:47:14 1956

原创 浅析Linux开发工具之gcc/g++

在windows开发平台,我们用惯了vc、vs等IDE(集成开发环境),在编译好源代码之后,按下相应按钮,IDE就会为我们完成编译,链接的过程。然后在Linux平台下,却没有这么方便的开发环境,很多事情都需要我们亲力亲为,为此我们要了解两款编译器:gcc/g++,它们分别是GNU的c &amp; c++编译器。 下面,来具体了解一下这两款编译器: 1、gcc/g++的安装 在终端输入两条命令即可:

2016-06-28 17:48:00 2074

原创 求两个已排序单链表中相同的数据(C语言)

PSListNode ByeNode(DataType data){ PSListNode pNewNode = (PSListNode)malloc(sizeof(struct SListNode)); if (NULL != pNewNode) { pNewNode->data = data; //注意使开辟的新节点的指向为空

2016-04-14 20:07:28 978

原创 求链表相交时的交点(C语言)

//链表相交时的交点PSListNode IntersectionNode(PSListNode pL1, PSListNode pL2){ int count1 = 0; int count2 = 0; PSListNode PSList1 = pL1; PSListNode PSList2 = pL2; PSListNode pMeetNode1 =

2016-04-14 20:06:16 808

原创 判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】(C语言)

int IsListCroseWithCycle(PSListNode pL1, PSListNode pL2){ PSListNode pMeetNode1 = HasCycle(pL1); PSListNode pMeetNode2 = HasCycle(pL2); if ((NULL == pL1) || (NULL == pL2)) { re

2016-04-14 20:05:15 684

原创 判断两个链表是否相交,若相交,求交点。(假设链表不带环)(C语言)

int IsListCrose(PSListNode pL1, PSListNode pL2){ if ((NULL == pL1) || (NULL == pL2)) { return 0; } else { PSListNode PSList1 = pL1; PSListNode PSList2 = pL2

2016-04-14 20:04:22 527

原创 判断单链表是否带环?若带环,求环的长度?求环的入口点?(C语言)

PSListNode HasCycle(PSListNode pHead){ if ((NULL == pHead) || (NULL == pHead->pNextNode)) { return NULL; } else { PSListNode pFast = pHead->pNextNode->pNextNode;

2016-04-14 20:03:00 616

原创 查找单链表的倒数第k个节点,要求只能遍历一次链表(C语言)

PSListNode FindLastKNode(PSListNode pHead, int K){ if ((NULL == pHead) || (K <= 0)) { return NULL; } else { PSListNode pFast = pHead; PSListNode pSlow = pHe

2016-04-14 20:01:05 1112

原创 查找单链表的中间节点,要求只能遍历一次链表(C语言)

PSListNode FindMidNode(PSListNode pHead){ if (NULL == pHead) { return NULL; } else { //快慢指针,快指针一次循环走两步,慢指针一次循环走一步 PSListNode pSlow = pHead; PSListNo

2016-04-14 20:00:03 990

原创 合并两个有序链表,合并后依然有序(C语言)

PSListNode MergeList(PSListNode pL1, PSListNode pL2){ PSListNode pNewNode = NULL; PSListNode pListNode1 = pL1; PSListNode pListNode2 = pL2; PSListNode pNode = NULL; if (NULL == pLi

2016-04-14 19:57:39 3137

原创 单链表排序(冒泡排序)(C语言)

优化版:void SortList(PSListNode pHead){ if (NULL == pHead) { return; } else { int flag = 0; PSListNode pTailNode = NULL; //当设置的尾节点与头结点指向同一个节点时,说明只...

2016-04-14 19:53:46 19272 9

原创 逆置/反转单链表(C语言)

1、逆置链表:前插法void ReverseList(PSListNode* pHead){ if (NULL == *pHead) { return; } else { //创建一个新的空链表,遍历pHead指向的链表里的所有节点,每找到一个,就前插到新链表里 PSListNode pNewHead = *pHead; *pHea

2016-04-14 18:51:39 838

原创 单链表实现约瑟夫环(JosephCircle)(C语言)

//使链表形成一个环void FormCyc(PSListNode *pHead){ if (NULL == pHead) { return; } else { PSListNode pNode = *pHead; while (NULL != (pNode->pNextNode)) {

2016-04-14 18:47:51 889

原创 在无头单链表的一个非头节点前插入一个节点(C语言)

①时间复杂度为N:void InsertNotHead(PSListNode pHead, PSListNode pos, DataType data){ PSListNode pPreNode = pHead; PSListNode pPreNode = pHead; if (NULL == pos) { return; } els

2016-04-14 18:45:52 848

原创 删除一个无头单链表的非尾节点(C语言)

void DelNotTailNode(PSListNode pos){ PSListNode pNode = NULL; assert(pos); if (NULL == pos->pNextNode) { return; } else { DataType temp = 0; //交换pos和

2016-04-14 15:40:23 2042 1

原创 从尾到头打印单链表(C语言)

void PrintListTailToHead(PSListNode pHead){ if (NULL != pHead) { //递归实现 PrintListTailToHead(pHead->pNextNode); printf("%d ", pHead->data); }}递归方式很容易就能实现。

2016-04-14 15:20:13 1733

原创 初识C++之多态

多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。 1、什么是多态   多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译

2016-04-13 22:42:20 731

原创 初识C++之虚函数

1、什么是虚函数   在基类中用virtual关键字修饰,并在一个或多个派生类中被重新定义的成员函数,用法格式为:   virtual 函数返回类型 函数名(参数表)    {     函数体    }    虚函数是实现多态性的关键,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。    看两个例子: ①没有定义基类的Fun函数为虚函数:#define _CRT_

2016-04-13 01:13:00 3635 2

原创 初识C++之封装

学习C++不得不说到C++的三大特性:封装、继承、多态,今天就先来剖析一下他的封装性。 1、什么是封装   封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。下面把一个汽车抽象为一个类来举例: 2、封装的目的   封装的目的是增强安全性和简化编程,它们分别体现在:   ①增强安全性:使用

2016-04-12 21:21:09 823

原创 初识C++之函数重载、重写、重定义的区别

在C++的学习中,慢慢接触了一些很容易混淆的名词,今天就来剖析几个容易混淆的名词。 1、函数重载   重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。想要构成重载函数必须要满

2016-04-12 19:56:31 3816

原创 初识C++之继承

1、何为继承  C++中所谓继承,就是在一个已存在类的基础上创建一个新的类,新类获得已存在类的部分特性(为什么是部分特性,后面会讲到)。已存在类被称为基类(Base Class)或父类(Father Class),新建类被称为派生类(Derived Class)或子类(Son Class)。 继承的声明形式: class 派生类名:[继承方式] 基类列表 {   派生类增加的特性; }

2016-04-11 17:30:51 2594

原创 防止头文件重复包含之pragma once与#ifndef

在我们自己编写 C/C++的头文件时,可能会忽略一点:用一些处理机制来避免头文件的重复包含,因为头文件的内容在编译 #pragma once #ifndef #define #endif

2016-03-31 00:01:49 894 1

原创 Waiting For Debugger

最近楼主在使用手机上的邮政银行时,总是打不开,要强制关闭,给我一个“Waiting For Debugger”的提示,相信朋友们应该遇到过类似的问题,当然这里不一定就是邮政银行出问题,可能是你手机里的任意一款软件,这里教给大家一张解决的办法。问题具体如下图:开始没管,想着也不咋用邮政银行,打不开就打不开吧!但是终于,楼主的强迫症犯了,非得想解决问题,不然坐立不安的。于是开始搜罗相关资料(其实也就是百

2016-03-30 19:58:48 4492

转载 对堆栈的认识

什么是堆和栈,它们在哪儿?问题描述编程语言书籍中经常解释值类型被创建在栈上,引用类型被创建在堆上,但是并没有本质上解释这堆和栈是什么。我仅有高级语言编程经验,没有看过对此更清晰的解释。我的意思是我理解什么是栈,但是它们到底是什么,在哪儿呢(站在实际的计算机物理内存的角度上看)? 1、在通常情况下由操作系统(OS)和语言的运行时(runtime)控制吗? 2、它们的作用范围是什么? 3、它们的大

2016-03-29 01:51:38 2241 2

原创 初识C++之运算符重载

define

2016-03-28 15:01:46 541

原创 初识C++之剖析const与#define

1、 编译器处理方式不同   #define是一个宏定义命令,它是在预处理阶段就进行了替换;   const修饰的是一个编译时常量,它是在编译阶段处理的。 2、 类型和安全检查不同   #define定义的标识符仅仅是产生文本替换,不管内容是否正确;   const修饰的符号是一个具有类型的符号,编译器在编译时会对其做严格的检查。 3、书写方式不同   #define是一个预处理命令,

2016-03-26 17:44:36 432

原创 初识C++之指针与引用

1、What a. 指针: 指针可以看做是一个特殊的变量,它是用来存放变量的地址值的。 b. 引用 引用的话,可以看做是给变量起的一个别名,而不是定义一个新变量,它与那个变量的本质是相同的,内容与地址都是一样的。2、Distinction a. 引用使用时无需解引用(*),指针需要解引用; b. 引用没有 const,指针有 const; c. 指针是一个实体,而引用仅是个别名; d

2016-03-26 16:56:31 644 2

原创 如何克服拖延症

拖延几乎成为现代人的通病,“先放一下,待会再行动”成为拖延者最大的思想毒瘤,如何积极地克服拖延症,已经成为了一个大课题。1、正视自己的拖延症。 要改掉拖延症坏毛病,首先就是要正确认识到拖延症的危害,正视自己拖延行为是错误的。拖延症往往会让一个人经常性的不能完成任务,耽误时间浪费精力。而且今天的事情拖明天,明天的事情拖后天,周而复始,一直持续焦虑和紧张状态中。不仅对工作学习不利,对身心健康也有极大的

2016-03-26 01:50:01 836

原创 强迫症的自我恢复

怎样克服强迫症?这是很多的人比较关注的一个问题。强迫症给人们的工作和生活带来很严重的影响,如果不及时进行治疗,对人的健康损害是很大的。那么怎样克服强迫症呢?下面就介绍一些怎样克服强迫症的调试方法,希望能帮助到更多的患者朋友。1、了解病因和发病机制 强迫症与一定的人格特征有密切关系。具有强迫症的人,在性格上往往表现出谨小慎微,墨守成规,缺乏自信,胆小怕事,优柔寡断,办事过于认真,喜欢过细地思考问题,

2016-03-26 01:44:51 3207 2

原创 乱入的'\0'

看这个题之前,先来回忆一下strlen函数的工作机制: strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,每碰到一个非’\0’的字符,计数器的值加1,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。#include &lt;stdio.h&gt;int main(){ char a[10

2016-03-26 01:32:13 480

原创 const在C与C++中的区别

1、C语言中的const a. 修饰变量 使用const修饰变量,使该变量的值不能被修改 b. 修饰函数参数

2016-03-26 00:13:17 982

原创 初识C++之函数重载

最近开始学习C++,了解到它在C语言没有的一个特性 – 函数重载,这一特性使得c++的函数数量得以减少,减小了对名字空间的污染,另外对程序的可读性也有很大帮助。那么c++的函数重载这一特性是怎么实现的,为什么不会发生命名冲突呢?别的函数在调用这些函数时编译器是怎么解析的呢?怎么知道它该调用哪一个函数呢?下面就这些问题来做一些简单解析。1、what and whywhat:C++允许在同

2016-03-25 16:44:42 844

原创 重载函数编译后的新名字

我们都知道很多语言都支持函数重载,那么编译器是怎么处理编译后它们的命名冲突的呢?1、先给出几个正确的重载函数:#include <iostream>using namespace std;int Add(int a, int b){ return a + b;}double Add(double a, double b){ return a + b;}double Add

2016-03-25 16:31:08 1789

原创 有趣的for循环

#include <stdio.h>int main(){ int i = 0; for(i = 0, printf(" First = %d", i);i<10, printf(" Second = %d", i);i++, printf(" Third = %d", i)) { printf(" Fourth = %d", i); }

2016-03-24 20:53:03 1317

转载 前置++与后置++之一道简单的题目引发的思考

引言昨晚一时兴起,我脑子就问自己下面的代码会输出什么,也不知道我脑子为什么有这个代码模型,只是模糊的有些印象:#include <stdio.h>#include <stdlib.h>int main(int argc,char** argv){ int i=3,j; j=(i++)+(i++)+(++i); printf("i = %d, j = %d\n",i,j);

2016-03-24 01:36:13 760

原创 线性表之顺序表与单链表的区别及优缺点

这里比较的是基于C语言实现的顺序表与单链表,与其他语言的实现可能会有差异,但我相信语言是相通的,它们的实现机制应该也差不多。 1、What 什么是顺序表和单链表 ①顺序表: 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L  1≤i≤

2016-03-23 23:43:04 33289 9

VC6.0批量添加和取消注释.zip

添加此宏之后,VC6.0可实现批量添加注释和取消注释,非常方便

2016-04-08

谷歌浏览器迅雷支持插件

使谷歌浏览器能支持迅雷下载

2016-03-25

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

TA关注的人

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