自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

NICOC_的博客

萌新一枚。

  • 博客(36)
  • 收藏
  • 关注

原创 Linux下的重要目录

Linux下的重要目录介绍根目录下有以下目录,如图其中重要介绍的有/proc, /sys, /selinux, /bin, /usr/lib, /usr/local, /var, /tmp/proc(process):此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间.proc文件系统是一个伪文件系统,它以文件系统

2017-10-28 10:23:11 415

原创 智能指针

我本次将从以下几点来分析智能指针1.为什么要有智能指针以及智能指针的发展历史2.智能指针的代码思想3.深度剖析智能指针———————————————————————————————————————————————————1.为什么要有智能指针以及智能指针的发展历史如果指针指向的空间是在栈上面开辟的空间,那么我们对其基本不需要干预,因为申请和释放都是由系统根据栈的

2017-08-07 11:18:18 398

原创 探索C++对象模型

1.多态的实现-虚表2.多继承的对象模型3.菱形继承&菱形虚拟继承的对象模型————————————————————————————————————————————————————1.多态:多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。允许将子类类型的指针赋值给父类类型的指针。根据对象不同,找到相应对象的实现方

2017-07-27 11:43:10 625

原创 写时拷贝(copy on write)

写时拷贝和传统深拷贝的区别:深拷贝是,每创建一个对象,则开辟一块空间,不管读写而写时拷贝是用一块空间count计数指向同一块空间指针的数量。如果只读不写,则只需要开辟一次空间。效率很高,内存占用的也少,如果指向同一块空间的指针需要修改其内容,则该指针会自己开辟一块空间用于修改,不会影响原来的空间。写时拷贝有两种方法————————————————————————————————

2017-07-21 16:47:46 988 1

原创 子类默认函数的写法&菱形继承&虚继承

1.C++继承关于子类的默认函数的写法2.分析菱形继承的问题3.剖析虚继承是怎么解决二义性和数据冗余的。———————————————————————————————————————————————————1.C++继承关于子类的默认函数的写法构造原则如下:a. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。b. 如果子类定义了构造方法,不论是无参数还

2017-07-20 20:28:20 714

原创 c/c++动态内存管理

1.malloc 和 new的区别转http://blog.csdn.net/zjc156m/article/details/168193572.new/delete的使用方法注意new\delete的配对使用,否则可能会出现内存泄漏或者程序崩溃的问题3.剖析new/delete & new[]/delete[](1)new/deletenew调用了oper

2017-07-04 16:28:05 393

原创 c++类中六个默认成员函数

一.类中六个默认成员函数简介六个默认成员函数是指,构造函数,拷贝构造函数,赋值运算符重载函数,析构函数,取地址操作符重载、const修饰的取地址操作符重载。1.构造函数特点:(1)函数名与类名相同   (2)可以重载   (3)构造对象时自动调用构造函数   (4)无返回值   (5)如果类中没有给出构造函数,编译器会自动产生一个缺省的构造函数,如果类中有构

2017-06-26 13:15:05 843

原创 CPP入门基础知识

1.命名空间2.C++基本的输入输出流3.重载(C++为什么支持重载?) 4.C++缺省参数 5.指针和引用(概念、使用方法、做参数、做返回值的作用,指针和引用的区别)———————————————————————————————————————————————————————————————————1.命名空间http://blog.csdn.net/passball

2017-06-19 17:47:20 925

原创 C语言实现单链表-面试题(基础篇)

单链表的实现(点击打开链接)单链表简易实现后有如下面试题1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用? 2.从尾到头打印单链表 3.删除一个无头单链表的非尾节点 4.在无头单链表的一个节点前插入一个节点 5.单链表实现约瑟夫环 6.逆置/反转单链表 7.单链表排序(冒泡排序&快速排序) 8.合并两个有序链表,合并后依然有序 9.查找单链表的中间

2017-06-09 18:33:46 860

原创 单链表的简单实现

单链表:链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置)头文件.结构的定义和 简单函数实现的声明#pragma once#include #include #include typedef int DataType;typedef stru

2017-06-09 18:10:29 648

转载 旋转字符串

此文章参考《程序员编程艺术》第一章题目描述:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数,要求对长度为n 的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。思路1:暴力翻转法初看此题,咱们最先想到的笨方法可能就是一位一位移动,故咱们写一个函数叫做l

2017-06-05 17:36:34 726

转载 C程序编译过程浅析

转自:http://blog.csdn.net/koudaidai/article/details/8092647点击打开链接代码如下:#include int main(){ printf("hello world\n"); return 0;}通常我们使用gcc来生成可执行程序,命令为:gcc hello.c,默认生成可执行文件a.out其实编译(包括链

2017-05-30 10:42:59 397

转载 C语言条件编译及编译预处理阶段

转自:http://www.cnblogs.com/rusty/archive/2011/03/27/1996806.html一、C语言由源代码生成的各阶段如下:C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件       其中 编译预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。或者说是

2017-05-30 10:03:50 588

转载 大小端介绍

端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian(这句话最为形象)。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big E

2017-05-30 09:48:38 451

原创 动态顺序表部分接口的简易实现

顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。代码目标:实现部分接口函数代码:头文件部分:#ifndef __SEQLIST_H__#define __SEQLIST_H__#define _CRT_SEC

2017-05-29 18:40:35 463

原创 C/C++的注释转换

C/C++的注释风格有两种,一种是“/*xxxxxxx*/ ”,这种注释可以注释行也可注释段   第二种是“//”,这种注释只能注释行目标要实现将所有/* xx*/注释风格变成//注释风格思路:使用有限状态机编程可能会出现的情况// 1.一般情况int num = 0;/* int i = 0; */// 2.换行问题/* int i = 0; */int j = 0

2017-05-28 10:50:06 739

原创 实现简易通讯录3.0 文件流

之前两个版本分别是 简易通讯录的静态实现:(点我进入)简易通讯录的动态实现(动态开辟空间):(点我进入)但是之前两个版本很明显的缺陷就是 每次退出通讯录后 之前输入的数据都被删除了,所以3.0版本实现的是用一个文件保存之前输入的数据,再次进入通讯录时就可以加载之前的东西啦。这次试用到的是fread,fwrite,fclose函数简单介绍一下这三个函数的使用方法:fread:

2017-05-27 09:21:39 575

原创 动态内存开辟malloc,calloc,realloc简述

1.提到动态内存开辟就要想到内存分配的堆区,静态区,堆区,栈区介绍和区别详情(点击这里)2.动态内存开辟是内申请一定的内存,C语言中与申请内存有关的函数有malloc,calloc,realloc,free,alloca等函数(1).mallocmalloc的函数申明:void* malloc(unsigned size);作用:在内存的动态存储区中分配一块长度为size字

2017-05-15 10:31:11 656

原创 将结构体实现的简易通讯录改成动态的版本

之前实现的一次结构体型通讯录电话本容量固定为1000,如果只需存50人,就浪费950的容量,如果存2000人,容量就不够了,所以这次动态开辟一个电话本容量。并且将之前的版本测试部分用函数指针数组简化完善一下。之前版本(点击这里) 代码如下:1.头文件部分:#ifndef __CONTACTS_H__#define __CONTACTS_H__#define _CRT_S

2017-05-15 09:33:01 890

原创 利用结构体实现建议通讯录

实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显示所有联系人信息6. 清空所有联系人7. 以名字排序所有联系人思路:将此次函数实现分为3个模块,1.头文件部分。2.函数实现部分。3.

2017-05-13 17:00:02 804

原创 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

如何求二进制中1的个数(三种方法)思路:1.在32位中,二进制表示数字1方式为 00000000 00000000 00000000 00000001首先我们的第一个方法就是一位一位的找,从左边第一位开始,每一次&1,则可以判断最后一位是否为1 ,代码如下:#include int Num_one(int num){ int i = 0; int count = 0;

2017-05-11 14:48:29 1720 1

原创 青蛙跳台阶普通版和升级版

1.一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n   级的台阶总共有多少种跳法2.一只青蛙一次可以跳上1级台阶,也可以骚起来跳,想跳几级就跳几级   求该青蛙跳上一个n级的台阶总共有多少种跳法思路:设此函数名为f(1)如果有n级台阶,青蛙第一跳可以跳2级,那么剩下n-2级    青蛙第一跳可以跳1级,那么剩下n-1级这样就把问题简化了,比如有5级台阶

2017-05-10 14:47:34 605

原创 求斐波那契数

求斐波那契数:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n思路:使用递归或者循环实现,使用递归有一个缺点,就是当n非常大时,函数调用次数巨大,速度极慢。#define _CRT_SECURE_NO_WARNINGS 1#include ////int Fibonacci(int n) //递归方法//{// if(n==0)// r

2017-05-10 13:57:43 694

原创 实现函数替换字符串中空格为%20.

实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy思路:计算空格数量,然后根据空格数量计算替换后字符串长度,然后将原字符串变为新字符串。#include #include #include void replace_space( char* dest){ int len =

2017-05-10 09:00:38 503

原创 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

一个二维数组,每行从左往右 数字依次增大,每列从上往下 数字依次增大,也就是杨氏矩阵。在里面查找一个数是否存在。#define _CRT_SECURE_NO_WARNINGS 1#include int num_research(int (*arr)[100],int row,int col,int n){ int x = col-1; int y = 0; while((x

2017-05-09 20:05:45 1037

原创 函数指针数组指针……%¥#* 的各种结合

浅谈:指针数组数组指针函数指针函数指针数组指向函数指针数组的指针1.指针数组:char* arr[5]首先,它是一个数组,一个可以存放5个指针的数组.里面每个元素存的是指向字符/字符串的指针。声明:char*(arr[i]),因为[]的优先级高于*。所以 char* arr[i],也可以    但是我觉得(char*)arr[i]不行,因为C语言

2017-05-08 14:11:18 490

原创 函数可变参数列简单用法

可变参数即表示参数个数可以变化,可多可少,也表示参数的类型也可以变化,可以是int,double还可以是char*,类,结构体等等。#include #include int average(int n,...){ int ret = 0; int sum = 0; int i = 0; va_list arg; //初始化arg为char类型指针 va_start(arg

2017-05-03 08:30:37 402

原创 函数的调用过程,栈帧的创建和销毁

我在通过调试时,看反汇编上的步骤来分析函数的调用过程,栈帧的创建和销毁。转到反汇编时,看到各种没见过的标识符,一脸蒙蔽,所以我们先了解这些标识符都是干嘛的。esp:esp寄存器里存储的是在调用函数之后,栈的栈顶。并且始终指向栈顶。ebp:ebp寄存器里存储的是是栈的栈底指针,通常叫栈基址,这个是一开始进行函数调用之前,由esp传递给ebp的。(在函数调用前你可以这么理解:esp存储的是

2017-04-17 10:52:38 1170

原创 C语言位运算符异或^的简单介绍

异或:位运算符,"异或"顾名思义就是两数相"异",则为真(1)。简单的描述其作用就是0^1=1,0^0=0,1^1=0。参加运算的两个二进制位为同号,则结果为0,异号则为1.______________________________________________________________________________________________异或的特性及应用:1.使特

2017-04-14 09:08:54 11331 1

原创 使用宏将数字的二进制奇数位偶数位交换

问题:将奇数位和偶数位交换。思路:将其第0位和第1位交换,第2位和第3位交换,以此类推。我们将用0x55555555(01010101010101010101010101010101)和X与运算,就能求得X的奇数位,再左移1,就能将奇数位变为偶数位。同理,用0xAAAAAAAA(10101010101010101010101010101010)和X与运算,就能得到X的偶数位,再右移1,

2017-04-12 08:37:03 578

原创 条件编译和常用预处理标识符的简单介绍

条件编译:一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)。比如调试用的代码,删之可惜,用之傻*,所以选择条件编译例:#include #define __DEBUG__int main(){ int i = 0; int arr[5] =

2017-04-11 14:52:18 1197

原创 宏和函数的区别以及宏的一些简单用法介绍

宏和函数的区别宏的定义:#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro),或者定义宏(define macro)。函数:它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。每次使用时只需要调用即可———————————————————————————————————————————————————————————

2017-04-11 14:07:11 1270

原创 冒泡排序,Bubble_rank

冒泡排序简述:就是将一串无序的数字按照自己规定的升序或者降序排列成有序的数列。如图:代码原理很简单,就是每次将第一个数和后面依次比较,直到冒泡完成。代码如下:#include void Bubble_rank(int arr[],int sz){ int i = 0; int k = 0; for(i=0; i<sz-1; i++) { for(k=0;

2017-04-05 07:54:46 527

原创 超级小游戏:三子棋

介绍一下游戏规则:在3*3的游戏棋盘内,玩家与电脑激战,电脑先手(笨鸟先飞,因为设计的是电脑随机落子),回合制落子,直到一方三子连珠,或者棋盘满了(平局)为止。游戏代码设计逻辑:此次由game.h(头文件引用和函数的声明)、game.c(函数的实现)、test.c(游戏测试)组成。电脑落子后,玩家落子,检查电脑和玩家落子是否正确,然后在棋盘中打印出落子,检查是否一方胜利或者平局。———

2017-04-04 16:56:09 479

原创 有关数组的运算z

关于数组的一些运算:我们先看看运算符sizeof和函数strlen函数的作用定义和用法。sizeof:sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。MSDN上的解释为:  The sizeof keyword gives the amount of storage, in bytes, associated wi

2017-04-03 08:19:59 404

原创 操作符和表达式的简单理解a

1.算术操作符其中有加减乘除余。符号依次为 + - * / %。a.除了%,其他几个操作符都可以进行浮点运算。b./操作符,进行运算的两个其中有一个浮点,则进行浮点运算。2.移位操作符>>>操作直接抛弃右边,算术位移时左边用符号位补。逻辑位移时用0补齐。tip:不移动负数位3.位操作符必须是整数!&(按位与):都是1为1,|(按位或)有一个1为1

2017-03-26 10:31:52 292

空空如也

空空如也

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

TA关注的人

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