
★C/C++基础
文章平均质量分 65
liuyanfeier
acmer
展开
-
指针和引用的区别
1.指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元; 引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。int a=1;int *p=&a; //定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。int a=1;int &b=a; //定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西原创 2016-10-16 13:13:27 · 228 阅读 · 0 评论 -
Memset()函数综合分析
memset()函数体void *memset(void *s, int ch, size_t n);作用:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作。不知道有没有像我一样把memset当作万能的初始化工具,例如:int arr[n];memset(arr,1,n*sizeo原创 2015-08-27 15:58:43 · 430 阅读 · 0 评论 -
stl之map介绍
一.Map概述 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的原创 2016-03-20 21:01:14 · 389 阅读 · 0 评论 -
C语言二进制文件读写以及大小端转换
因为工作需要所以需要将文件用二进制方式读取。网上资料比较少,所以我再次把自己的实践过程mark一下。 并且由于代码可能需要在不同的机器上运行,所以还需要考虑一下大小端转换问题。 先看下面的代码,然后我在简短的解释一下。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <string>#define nmemb原创 2017-03-09 11:37:25 · 11268 阅读 · 0 评论 -
C语言字符串读取函数 gets()与fgets()
在c语言中读取字符串有多种方法,比如scanf() 配合%s使用,但是这种方法只能获取一个单词,即遇到空格等空字符就会返回。如果要读取一行字符串,比如:I love BIT这种情况,scanf()就无能为力了。这时我们最先想到的是用gets()读取.gets()函数从标准输入(键盘)读入一行数据,所谓读取一行,就是遇到换行符就返回。gets()函数并不读取换行符’\n’,它会吧换行符替换成空字符’\原创 2017-03-09 14:22:12 · 16379 阅读 · 1 评论 -
trie字典树实现
实现了一个简单的字典树. 假设所有的字符只有26个小写字母,并且除了节点出现的次数之外还增加了类似map功能的索引。 假如不只有26个字母,需要相应的做一些修改。#include <stdio.h>#include <string.h>#include <stdlib.h>#define ALPHABET_SIZE 26int num = 0;typedef struct trie_nod原创 2017-03-09 14:33:14 · 396 阅读 · 0 评论 -
数组与指针
数组数组是指具有相同类型的数据组成的序列,是有序集合。(教科书上的定义) 即:数组就是内存中一段连续的存储空间。那么我们怎么使用它呢?用数组名。也就是我们用数组名可以在内存中找到对应的数组空间,即数组名对应着地址。对应着首元素的地址,所以,我们可以通过数组的首元素地址来找到数组数组名是一个地址(首元素地址),即是一个指针常量。 只有在两种场合下,数组名并不用指针常量来表示:sizeof(数组名原创 2017-03-17 11:35:38 · 478 阅读 · 0 评论 -
C语言文件操作
打开文件fopen我们可以使用fopen()创建一个新的或者打开一个文件, 文件信息会保存在一个FILE类型的指针中, 该函数的原型为:FILE *fopen( const char * filename, const char * mode );filename是文件名, mode是打开模式, 可选值如下:r - 以只读方式打开一个文件, 该文件必须存在w - 以只写方式打开一个文件, 文件原创 2017-03-17 14:27:21 · 930 阅读 · 1 评论 -
char short int long float double等字节大小基础信息
C类型 字节(32位) 字节(64位)char 1 1 short int 2 2 int 4 4 long int 4 8 long long int 8 8 float 4 4 double原创 2017-04-19 20:15:26 · 9449 阅读 · 0 评论 -
用面向对象的方法进行设计
编写一个与图形相关的应用程序,需要处理大量图形(Shape)的信息。图形有矩形(Rectangle),圆形(Circle)和正方形(Square),应用需要计算这些图形的面积并且可能在设备上进行显示。#include #include #include #include #include #include #include #include using na原创 2016-04-07 16:08:52 · 635 阅读 · 0 评论 -
拷贝构造函数
一.定义: 就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。 自定义拷贝构造函数:1. //拷贝构造函数 2. CExample(const CExample& C) 3. { 4. a = C.a; 5. } CExample(const CExample& C) 就是我们自定义的拷贝构造函数。可见,拷贝构造函数原创 2016-10-16 13:44:59 · 334 阅读 · 0 评论 -
C++设计模式——单例模式
何为单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点, 该实例被所有程序模块共享。 首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函数,如此,为了防止在外部调用类的构造函数而构造实例,需要将构造函数的访问权限标记为private或者protected;最后,需要提供要给全局访问点,就需要在类中定义一个static函数,返回在类内部唯一构造的实例。实现方法原创 2016-10-16 13:48:01 · 277 阅读 · 0 评论 -
各种C++关键字的作用
一. static static关键字至少有下列5个作用: (1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; (2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; (3)限制函数的作用域,在模块内的sta原创 2016-10-16 13:18:08 · 1662 阅读 · 0 评论 -
C++智能指针简单剖析
智能指针是一个类,这个类的构造函数中传入一个普通指针,析构函数中释放传入的指针。智能指针的类都是栈上的对象,所以当函数(或程序)结束时会自动被释放。 1. 智能指针背后的设计思想 auto_ptr、unique_ptr和shared_ptr这几个智能指针背后的设计思想。我简单的总结下就是:将基本类型指针封装为类对象指针(这个类肯定是个模板,以适应不同基本类型的需求),并在析构函数里编写dele原创 2016-10-16 13:22:49 · 571 阅读 · 0 评论 -
类的大小——sizeof 的研究
先看一个空的类占多少空间? class Base { public: Base(); ~Base(); }; 注意到我这里显示声明了构造跟析构,但是sizeof(Base)的结果是1.不申明或者是用struct也是一样的,结果为1.因为一个空类也要实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一原创 2016-10-16 13:27:34 · 350 阅读 · 0 评论 -
野指针
野指针 野指针不是空指针,是一个指向垃圾内存的指针。 形成原因: 1.指针变量没有被初始化。 任何指针变量被刚创建时不会被自动初始化为NULL指针,它的缺省值是随机的。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如: char* p = NULL; char* str = (char*)malloc(102原创 2016-10-16 13:29:42 · 282 阅读 · 0 评论 -
C++11新特性
什么是C++11 C++11包括大量的新特性:包括lambda表达式,类型推导关键字auto、decltype,和模板的大量改进。1.auto C++11中引入auto第一种作用是为了自动类型推导 auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推导,可以大大简化我们的编程工作 auto实际上实在编译时对变量进行了类型推导,所以不会对程序的运行效率造成原创 2016-10-16 13:34:44 · 322 阅读 · 0 评论 -
浅谈C++多态性
多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。(这里我觉得要补充,重写的话可以有两种,直接重写成员函数和重写虚函数,只有重写了虚函数的才能算作是体现了C+原创 2016-10-16 13:35:42 · 276 阅读 · 0 评论 -
class和struct的区别
struct能包含成员函数吗? 能! struct能继承吗? 能!! struct能实现多态吗? 能!!! 既然这些它都能实现,那它和class还能有什么区别? 最本质的一个区别就是默认的访问控制: 默认的继承访问权限 struct是public的,class是private的。 你可以写如下的代码:struct A{ char a;};struct B : A{原创 2016-10-16 13:38:42 · 392 阅读 · 0 评论 -
虚函数与纯虚函数
1.虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class), 任何试图对抽象类进行实例化的语句都将导致错误的产生,因为抽象基类(ABC)是不能被直接调用的。(父类的函数为虚函数,那么子类中重写的该函数自动设为虚函数,不管有没有virtual关键字)2.虚函数可以原创 2016-10-16 13:39:33 · 314 阅读 · 0 评论 -
Linux C 多线程编程
简介进程— 资源分配的最小单位 线程— 程序执行的最小单位进程是一个程序的一个实例,拥有自己独立的各种段(数据段,代码段等等),每次创建一个进程需要从操作系统分配这些资源给他,消耗一定的时间,在linux下C语言创建一个进程使用fork()函数; 线程是一个轻量级的进程,除了自己少数的资源,不用用其他资源,且一个进程可以创建多个线程,这些线程共享进程的资源,创建线程的时间要比创建进程少很多,(几原创 2017-07-04 16:44:41 · 16129 阅读 · 0 评论