C/C++
文章平均质量分 63
zhangyin_blog
这个作者很懒,什么都没留下…
展开
-
C/C++中static关键字的用法
(一)变量的分类变量可以分为全局变量、静态全局变量、静态局部变量和局部变量这四种。这几种变量的特点如下:(1) 按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。(2) 按作用域1.全局变量在整个工程文件内都有效;2.静态全局变量只在定义它的文件内有效;3.静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,...原创 2018-07-17 15:27:20 · 997 阅读 · 0 评论 -
关于数组的剑指offer习题
(一)二维数组中数字的查找此二维数组的特点每一行都按照从左到右递增 每一列都按照从上到下递增题目要求:给定这样一个数组和一个整数 查找这个整数是否在数组中解题思路:由于题中所所述的二维数组的特点 从二维数组最后一列的第一个元素arr[row][col-1]找起 如果要找的数字大于arr[row][col] 则直接跳到下一行 由于arr[row][col]前面的数字都小于...原创 2018-08-26 15:21:34 · 222 阅读 · 0 评论 -
判断大端小端以及模拟htons函数
大端:指的是一个整数的高位字节存放在内存的低地址处小端:指的是一个整数的低位字节存放在内存的低地址处现代PC大多采用的是小端字节序,又称为主机字节序,而网络中传输数据时使用的是大端字节序,又称为网络字节序如何判断大小端呢?代码如下://判断大端或者小端void IsPort(){ union { short int a;//短整型两个字节 char b[size...原创 2018-08-22 21:16:22 · 524 阅读 · 0 评论 -
常见STL容器总结
/*STL容器主要分为顺序容器 vector(向量容器) deque(双端队列容器) list(双向链表)关联容器 set(单重集合) multiset(双重集合) map(单重映射表) multimap(多重映射表)容器适配器 stack(栈) queue(队列) prority_queue(优先级队列)*/(一)vector向量容器1.包含在头文件#include...原创 2018-08-27 15:29:46 · 8106 阅读 · 1 评论 -
内存管理以及常见内存泄漏处理
(一)内存分配方式(1)从静态存储区域分配;内存在程序编译的时候就已经分配好,这块内存在程序整个运行期间都存在;例如全局变量、static变量(2)在栈上创建;在执行函数时,函数调用会开辟栈帧空间,内部的局部变量的存储单元都存在于栈空间,函数体执行完成后这片空间自动被释放(3)在堆上分配;即就是我们常说的动态内存分配。程序运行期间通过malloc或new申请任意多少内存,程序自己负责在...原创 2018-08-20 20:33:15 · 636 阅读 · 0 评论 -
指针与数组的比较
数组有两种创建方式,一种是在全局静态存储区创建(全局数组),一种是在栈上创建;(1)数组名对应的是一块内存而不是指向,地址和容量不允许改变,只允许改变内存里的内容; 指针可以指向任意类型的内存块,它是可变的,常用指针操作动态内存 接下来以字符串为例来说明两者的区别(2)大小不同 char str1[] = "hello";大小为6个字节,表示存放6个字符的...原创 2018-08-20 21:03:30 · 1282 阅读 · 0 评论 -
typedef与define的区别
(一)typedef(1)typedef 为某一种类型引入新的名字 ,并不为变量分配内存空间(2)不可以同时将多个声明放在一个typedef(3)举例说明typedef int KeyType //为int引入新名字int a ;//定义一个整型变量aKeyType b;//定义一个整型变量btypedef int* ptr,(*fun)(),arr[5];/*...原创 2018-08-28 17:48:38 · 1712 阅读 · 0 评论 -
malloc与free、new与delete
(一)malloc与free1.void *malloc(int size);它的返回值为void*,表示分配的堆内存的起始地址,返回值可以被强转为任何类型的指针;并且malloc函数分配得到的内存空间是未初始化,一般要调用memset函数将其初始化为0;void *memset(void *p,int c,int n);该函数可以将指定的内存空间按字节单位置为指定的字符c;...原创 2018-08-21 14:18:06 · 230 阅读 · 0 评论 -
C语言模拟C++多态
typedef void(*FUN)();//重定义一个函数指针类型struct Base{ FUN f;//由于C语言中结构体不能包含函数 只能用函数指针在外面实现};struct Derive//本派生类只继承了父类 他自己没有自己的部分{ Base b;//在子类中定义一个基类的对象即可实现对父类的继承};void FunB(){ printf("%s\n",...原创 2018-08-28 18:38:55 · 189 阅读 · 0 评论 -
继承与多态
一、继承继承1.本质:实现代码复用2.继承与派生 基类Base 派生类Derive 基类Base派生了派生类Derive 派生类Derive继承了基类Base Derive is a kind of Base 比如学生是人 但是人不一定是学生 继承方式:public protected private 3.继承的内容 基类的成员变量 成员方法 作用域 4.不被继承...原创 2018-08-16 19:33:30 · 202 阅读 · 0 评论 -
指针和引用的区别
指针和引用的区别 1.相同点 (1)底层处理方式相同 int a = 10; int *p = &a; int &b = a; 对于指针p:lea eax [a] mov drop ptr [p] eax 对于引用b:lea eax [a] mov drop ptr [b] eax 2.不同点 ...原创 2018-08-16 14:46:14 · 196 阅读 · 0 评论 -
指针和引用作为返回值
一、 函数返回值 1.如果返回值小于4byte 用寄存器eax带回返回值 2.如果返回值大于4byte小于8btye,用两个寄存器eax edx带回返回值 3.如果返回值大于8byte,在调用前main函数中产生临时量接受返回值 二、临时量生成的三种情况 1.函数调用之前产生,目的是为了接受函数的返回值 2.函数的return语句处 ...原创 2018-08-16 14:44:41 · 2535 阅读 · 0 评论 -
从编译链接的ELF结构看static关键字
本文主要讨论static在C++中的应用(1)static修饰全局变量和局部变量全局变量属于数据,不是放在.data段,就是在.bss段;如果是一个常量字符,那么存储于.rodata段;局部变量属于指令,存储于.text段,运行时系统为其分配栈上空间,函数的局部变量此时表示栈上的一段内存;那么加了关键字之后有何变化呢?请看如下代码:int gdata1 = 10;//全局变量...原创 2018-07-25 09:50:01 · 648 阅读 · 0 评论 -
如何实现一个不被继承的类?
(一)单例模式下的不被继承的类从继承的特性来说,派生类继承其基类的私有成员,但是不可访问;派生类的构造要先调基类的构造函数构造基类然后在调自己的构造函数构造自己;我们可以将基类的构造函数写在private下,那么基类此时就是一个不被继承的类;但是这样基类是不可被继承,但同时他也不会正常实例化对象,因为不可访问其私有成员;这时我们可以借助单例模式来实现,通过静态方法实现返回一个对象,但是这种实例...原创 2018-07-26 10:46:43 · 1223 阅读 · 0 评论 -
C++编译链接全过程
今天博文主要讨论的问题是:我们编写的程序代码是怎样运行起来的?到底运行的是什么内容?平时我们所说的编译主要包括预编译、编译、汇编三部分,这三部分分别都干什么工作,主要职能有哪些,接下来我们一步步探讨总结。(一)预编译(1)由源文件“.cpp/.c”生成“.i”文件,这是在预编译阶段完成的;gcc -E .cpp/.c --->.i(2)主要功能 展开所有的宏定义,消除“#de...原创 2018-07-22 16:47:00 · 11854 阅读 · 4 评论 -
字符串常见操作
(一)字符串基本操作(1)字符串拷贝//字符串拷贝bool Mystrcopy( char *des,const char *src){ if(des==NULL||src==NULL) { return false; } while(*des++=*src++); return true;}(2)字符串连接//字符串连接char *Mystrcat(c...原创 2018-08-04 22:49:32 · 250 阅读 · 0 评论 -
C++默认的六个函数
(一)构造函数1.构造函数:CMyString(){} (1)函数名与类名相同 无返回值 对象构造时系统自动调用相应的构造函数 构造函数可以重载 可以在类内或者类外定义(指定作用域即可) (2)初始化列表比函数内初始化更高效 对于自定义类型,在初始化时系统会自动生成初始化列表,即系统会先走一遍初始化列表, 然后在调用函数体内的初始化,也就是初始化了两遍;所...原创 2018-08-04 22:55:15 · 408 阅读 · 0 评论 -
单例模式的实现
(一)单例模式的设计目的单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点;(1)基于全局访问点的思想,很容易想到定义全局或者静态对象,但是这样不能保证该类只声明一个静态对象,并没有实现仅有一个对象的思想;(2)单例模式设计方式 将类的构造函数写在私有下; 定义一个静态的指针指向该类唯一的对象; 定义一个公有下返回该对象的静态方法代码如下://单例模式 c...原创 2018-07-27 19:12:38 · 2378 阅读 · 1 评论 -
C和C++中的const关键字
(一)C和C++中的相同点1.const 修饰指针 const与一级指针结合 int const *p; const int *p;---->p为常量指针 p指向的内容不可改 p的指向可以改 int *const p;---->p为指针常量 p的指向不可改 指向的内容可改 const int *const p---->p的指向和指向的内容都不可改 c...原创 2018-08-15 21:31:57 · 155 阅读 · 0 评论 -
extern关键字的用法
extern关键字的用法1.引用同一工程下不同文件下的全局变量 a.cpp int data = 10; b.cpp extern int data ;cout<<data<<endl;//success a.c int a = 10; b.c extern int a; printf("%d\n",a);//success 不管是在 .c还是.c...原创 2018-08-15 22:33:10 · 337 阅读 · 0 评论 -
宏的高级用法
1.# 出现在宏定义中的#是把跟在后面的参数转成一个字符串2.## 是一种分隔符 先分隔 在强制连接注意点:当宏函数中再次调用相同宏函数的时候 括号里的宏函数不会展开#define TOSTR(moudle) #moudle#define TOSTRCAT(x, y) (x##y)int main(){ char *pstr = TOSTR(add); ...原创 2019-04-05 15:48:02 · 751 阅读 · 0 评论