- 博客(40)
- 资源 (2)
- 收藏
- 关注
原创 【C++ - 21】局部变量和全局变量的区别
局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。要使用全局变量,需要使用::。在函数体内引用变量会用到同名的局部变量而不是全局变量,对于一些编译器来说,在同一个函数体内可以定义多个同名的局部变量。例如我们可以在一个函数内部,在两个循环中都定义同名的局部变量i,而局部变量i的作用域在那个循环体内 具体来说,全局变量和局部变量的区别如下:1. 作用...
2014-05-29 09:20:47 54510 5
原创 【C++ - 20】C/C++中全局变量和静态变量的区别
1. 全局变量的作用域是整个项目,它只需要在一个源文件中定义就可以作用于所有的源文件,其它不包括全局变量定义的文件需要用extern关键字再次声明这个全局变量。2. 全局变量、静态全局变量、静态局部变量都是在静态存储区(全局数据区)中分配空间的,而局部变量是在栈上分配空间的。3. 全局变量、静态变量的生命期和程序生命期是一样的,在程序结束之后操作系统会回收空间。...
2014-05-28 22:21:36 5099
原创 【C++ - 19】C++中重载和覆盖的区别
一. 重载(overload)1. 重载指的是函数具有的不同的参数列表,而函数名相同的函数。重载要求参数列表必须不同,比如参数的类型不同、参数的个数不同、参数的顺序不同。2. 如果仅仅是函数的返回值不同是没办法重载的,因为重载要求参数列表必须不同。3. 程序是根据参数列表来确定具体要调用哪个函数的4. 看下面几个例子void Fun(int a);void Fun(d...
2014-05-28 11:29:17 10253
原创 【C++ - 18】C++函数参数传递三种方式
当进行函数调用的时候,要填入与函数形式参数个数相同的实际参数,在程序运行的过程中,实参会将参数值传递给形参,C++函数参数传递有以下三种方式。一. 值传递1. 利用值传递方式,实际上是把实参的内容复制到形参中,实参和形参是存放在两个不同的内存空间中。在函数体内对形参的一切修改对实参都没有影响2. 如果形参是类的对象,利用值传递的话每次都要调用类的构造函数构造对...
2014-05-28 10:04:52 14763
原创 【C++ - 17】指针常量、常量指针、指向常量的指针常量
指针常量、常量指针、指向常量的指针常量,这三个概念让很多人感到拗口,不好记住。但是只要你仔细研究,其实也就这么回事。一. 指针常量1. 所谓的指针常量指的是指针是一个常量,也就是常指针,和我们平时说的常量一样,指针指向的内存空间的地址是无法改变的2. 声明一个指针常量 int* const p = &a,定义一个指针p并且该指针是常量只能指向变量a。记住指针常量只能...
2014-05-28 09:08:09 1040
原创 【C++ - 16】判断操作系统是16位还是32位
法一:利用sizeof可以使用sizeof计算int的字节长度来判断是32位还是16位。32位机器下:sizeof(int) = 4;16位机器下:sizeof(int) = 2但是实际中可能64位的机器sizeof(int)也是4字节,因为很多时候是编译器决定要占用几个字节法二:利用最大值1. 机器位数不同则表示的数字的最大值是不同的。 32位机器下in...
2014-05-27 16:08:17 5223
原创 【C++ - 15】位运算求解一个整数的二进制中1的个数
法一:#include<iostream>#include<algorithm>using namespace std;int Count(int x){ int ans = 0; while(x != 0){ ++ans; x = x&(x-1); } return ans;}int main(){...
2014-05-27 15:31:24 2417
原创 【C++ - 14】位运算求解两个数的平均值
1. 给定两个数x和y,朴素算法求解两个数的平均值是(x+y)/2,但是这种方法有个问题就是当x和y的和溢出的时候得到的平均值是错误的,我们可以采用位运算来解决这个问题。 一般对于x和y不大的时候,利用(x+y) >> 1可以得到两个数的平均值 对于一个数a,a << n表示的是a*2^n;a >> n表示的是a/2^n2. ...
2014-05-27 15:17:48 2519
原创 【C++ - 13】C/C++中struct研究
一. C和C++中struct的区别C语言中struct是用户自定义的数据类型,它是没有权限设置的,它只能是一些变量的集合体,虽然可以封装数据但是不能够隐藏数据,而且成员也不可以是函数。C++中struct是抽象数据类型,它支持成员函数的定义,并且有访问权限,C++中struct默认访问权限是public。主要区别有以下三点1. C语言中struct不能有成员函数,而C++中...
2014-05-27 13:04:14 1216
原创 【C++ - 12】C++中宏定义和内联函数区别
一、宏定义和内联函数的区别1. 宏定义不是函数,但是使用起来像函数。预处理器用复制宏代码的方式代替函数的调用,省去了函数压栈退栈过程,提高了效率。 内联函数本质上是一个函数,内联函数一般用于函数体的代码比较简单的函数,不能包含复杂的控制语句,while、switch,并且内联函数本身不能直接调用自身。如果内联函数的函数体过大,编译器会自动的把这个内联函数变成普通函数。...
2014-05-27 00:45:27 7606
原创 【C++ - 11】#define和typedef的区别
typedef和#define都是替一个对象取一个别名,来增强程序的可读性,但是它们有以下几个区别1. 原理不同 (1)#define是C语言中定义的语法,它是预处理指令,在预处理的时候进行简单的字符串替换,不作任何的正确性的检查,不管是否正确照样带入替换,只有在编译的时候才会发现错误并报错 (2)typedef是关键字,在编译的时候处理,所以typedef是有类型检查的...
2014-05-26 23:40:12 1025
原创 【C++ - 10】C/C++中#define的探究
一. #define简介1. #define命令是宏定义命令,主要在预编译的时候进行字符替换,把宏名用宏体进行替换2. 预编译的主要工作主要是进行代码文本的替换工作,用于处理#开头的指令,包括#Include、#define、#ifdef、#endif等等,预编译的工作只是纯粹的替换与展开,没有任何的计算功能二. #define命令的缺陷1. 无法进行类型检查。宏定义是...
2014-05-26 22:47:13 1240
原创 【C++ - 9】C++中野指针和空指针和无类型指针
一. 野指针所谓的野指针指的是一个指针变量指向了不可使用的内存空间。产生野指针三个原因:(1)指针变量创建时候没有被初始化:任何指针变量在创建的时候,不会自动成为NULL指针,它的默认值是随机的,因此该指针就会成为一个野指针,可能指向一块不可使用的内存空间。 例如char *p; 这样创建一个指针p,指向一个随机的内存地址空间 所以指针在...
2014-05-26 10:00:37 3502
原创 【C++ - 8】C++中引用和指针的区别
1. 引用其实就是一个别名,它用于定义一个变量共享另一个变量的内存空间,变量是内存空间的名字,如果给内存空间起另外一个名字,就能够共享这个内存。2. 指针则是指向一个内存空间的变量,可以通过指针来查看某个内存空间的内容,而指针本身在32位机器下占据4个字节的空间指针和引用的区别有以下几个方面(1)指针是一个存放变量地址的变量,它可以被改变即可以指向不同的地址空间; ...
2014-05-26 09:24:24 930
原创 【6】连续序列和为s
题目:输入一个整数s,打印出所有和为s的连续整数序列(至少含有2个数)。例如输入9,则输出2、3、4和4、5两个序列方案一:由于序列至少要2个数,则两个数上限值为(1+s)/2,我们可以枚举该序列的起点和终点求所有满足的序列。时间复杂度为O(n^2),效率比较低方案二:我们设置两个指针start和end分别表示当前序列的起点和终点,并记序列和为sum。当sum = s的时候输出这个
2014-05-24 21:07:53 1579 1
原创 【5】和为s的两个数字
题目:输入一个递增的排序的数组和一个数字s,在数组中查找两个数,使得它们的和为s。如果有多对满足条件的则输出任意一对即可方案一:枚举两个数求和判断,时间复杂度O(n^2),显然效率太低方案二:枚举第一个数,二分第二个数,时间复杂度O(nlogn),效率高了很多方案三:设置两个指针p1,p2初始化指向数组的第一个数和最后一个数(即最小值和最大值),判断两个指针指向的两个数sum和
2014-05-24 20:29:41 1548
原创 【C++ - 7】strlen和sizeof的区别
1. strlen是库函数,用来计算一个字符串的长度。从字符串的开头开始扫描,直到碰到第一个‘\0'字符为止,然后返回字符串的长度2. sizeof是C/C++中的关键字,用来计算某一个类型或变量占用多少字节内存空间。strlen与sizeof主要区别如下:1. strlen是函数,sizeof是关键字2. sizeof操作符的结果类型是size_t,它在头文件中typ...
2014-05-24 19:12:33 1842
原创 【C++ - 6】一个C/C++程序内存分配形式
一:一个C/C++程序编译之后在内存中一般分为五个部分1. 程序代码区:程序代码区主要用来存放程序执行代码,包括类成员函数、全局函数、静态函数等其它函数的代码。这部分内存区域的大小在程序运行前就已经确定了,并且内存通常是只读的。一般程序代码区是可以被共享的2. 常量区:用来存放常量的内存区域,程序结束后由操作系统收回3. 全局数据区(静态存储区):存放全局变量和静态变...
2014-05-24 16:44:04 1061
原创 【C++ - 5】new delete和 malloc free的区别
1. 在C++中申请动态内存与释放动态内存用new delete和malloc free都可以,并且new与malloc申请的内存空间位于堆区,无法被操作系统自动回收,需要手动delete 或 free来释放2. new delete是C++中的一种运算符,malloc和free是C、C++中一种标准库函数,在C语言中需要用头文件#include<stdlib.h>支持。对于...
2014-05-24 14:37:01 1782
原创 【C++ - 4】字符指针和字符数组的使用区别
先看一个程序代码#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int main(){ char str1[] = "abc"; char str2[] = "abc"; char *str...
2014-05-24 12:33:56 1093
原创 【C++ - 3】C/C++关键字之const
const是C和C++中常见的关键字,在C语言中主要用来定义常量和修饰函数的参数和返回值,在C++中还可以用来修饰类的成员函数等一. 什么情况下使用const关键字?1. 修饰常量,比如const int MAXN = 10 或者 int const MAXN = 10;或者修饰常量数组const int ARR[2] = {1,2}; 编译器通常不会为常量分配内存空间,而...
2014-05-24 11:56:34 891
原创 【C++ - 2】C/C++关键字之static
static是静态的意思C语言中static的作用1. 在函数体内,静态变量具有“记忆”的功能,即在函数体内部一个被声明为静态的变量在函数的调用过程中值是不变的,初始化只会被执行一次2. static全局变量和全局函数只能被本程序的函数所使用,不能被其它文件使用。一般的全局变量和全局函数可以被项目其它文件所使用3. static变量,不论是全局static变量还是static局部变...
2014-05-24 10:30:28 1698
原创 【3】数组中只出现一次的数字
题目:输入一个整型数组,数组里除了两个数出现一次之外,其它所有数字出现的次数都是2次,求这两个数字。要求时间复杂度为O(n),空间复杂度为O(1)1 题目要求时间复杂度为O(n)并且空间复杂度为O(1)。这个时候朴素的方法利用数字来记录出现次数的方案都是不行的。2 根据题目的特点,只有两个数出现一次,其它的所有数据都是出现2次。如果这两个数是a和b,那么对这个数组异或的结果就是a^
2014-05-23 22:15:34 1254
原创 【2】输入一颗二叉树判断是不是平衡二叉树
题目:输入一颗二叉树的根结点,判断该二叉树是不是平衡二叉树。平衡二叉树是满足所有结点的左右子树的高度差不超过1的二叉树方案一:遍历数组的每一个结点,对每一个结点求它的左右子树的高度并进行判断。时间复杂度大于O(n),小于O(n^2)效率较低,因为有很多点需要重复访问。//二叉树的结点struct BinaryTreeNode{ int m_value; Bin
2014-05-23 21:08:24 3033
原创 【1】数字在数组中出现的次数
题目:统计一个数字k在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,输出4次方案一:扫描数组,记录第一个出现的k和最后一个k中间有多少个,时间复杂度为O(n)方案二:由于数组是有序的,那么我们可以利用二分的思想,求出k在数组中的第一个位置和最后位置相减即可。时间复杂度为O(logN)注意严格按照良好的C++编码风格#include
2014-05-23 20:09:49 2199
原创 【C++ - 1】高效C++编程
推荐编写C++的代码风格,看似容易,坚持不易,且写且珍惜! --陈国林1.版本和版本声明版本和版本文件声明位于头文件和定义文件的开头,主要内容(1)版本信息(2)文件名称、标识符、摘要(3)当前的版本号、作者、修改日期(4)版本历史信息2.程序版式(1)在每个类声明之后、每个函数定义之后都要加上一个空行(2)一行代码只做一件事情(3)if、...
2014-05-23 12:40:20 1732
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人