![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++编程
文章平均质量分 81
banbanlin
这个作者很懒,什么都没留下…
展开
-
C/C++学习笔记:String类的构造函数、析构函数和赋值函数
#include class String{public: String (const char *str = NULL); //通用构造函数 String (const String &another); //拷贝构造函数 ~String(); //析构函数 String& operator = (const String &rhs); //赋值函数prote原创 2014-08-17 23:07:30 · 806 阅读 · 0 评论 -
C++ 构造/析构函数中的异常处理
C++ 为什么会引入(需要)异常?The C++ Programming Language: 一个库的作者可以检测出发生了运行时错误,但一般不知道怎样去处理它们(因为和用户具体的应用有关);另一方面,库的用户知道怎样处理这些错误,但却无法检查它们何时发生(如果能检测,就可以再用户的代码里处理了,不用留给库去发现)。C++ primer: Exceptions let us se转载 2014-09-23 18:32:07 · 2001 阅读 · 0 评论 -
C/C++学习笔记:基础知识3
1 &&和&、||和|有什么区别原创 2014-08-19 22:01:58 · 567 阅读 · 0 评论 -
C/C++输入输出流总结
C++ I/OC++支持两种I/O,第一种是从C语言继承来的,一种是由C++定义的面向对象I/O系统。1、int getchar(void);返回一个整数值,也可以指定这个值为char变量,因为这个字符包含于低位字节中(高位字节通常为0),如果有错,getchar()返回EOF。但是他有一个潜在的问题,正常情况下,getchar()缓存输入,直到键入了回车键(这个大家应该深有体会,转载 2014-09-23 18:29:15 · 2213 阅读 · 0 评论 -
随机数的函数
题目给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即:使用函数rand5()来实现函数rand7())。解答rand5可以随机生成1,2,3,4,5;rand7可以随机生成1,2,3,4,5,6,7。 rand5并不能直接产生6,7,所以直接用rand5去实现函数rand7似乎不太好入手。 如果反过来呢?给你rand7,让你实现rand5,这个好实转载 2014-09-24 15:20:59 · 1023 阅读 · 0 评论 -
有趣的C语言问答
1,gets() 方法 Q:以下代码有个被隐藏住的问题,你能找到它吗?12345678910111213#include intmain(void){ charbuff[10];转载 2014-09-15 14:22:57 · 530 阅读 · 0 评论 -
算法设计:小技巧汇总
1 找出两个数中的最大数:原创 2014-08-20 21:47:15 · 496 阅读 · 0 评论 -
C/C++学习笔记
1 在内建数据类型的情况下,效率没有区别 在自定义数据类型d原创 2014-09-18 16:18:15 · 436 阅读 · 0 评论 -
浅拷贝与深拷贝
浅拷贝并不复制数据,只复制指向数据的指针,因此是多个指针指向同一份数据。 深拷贝会复制原始数据,每个指针指向一份独立的数据。通过下面的代码, 可以清楚地看出它们的区别:12345678910structTest{ char*ptr;转载 2014-09-25 21:47:46 · 465 阅读 · 0 评论 -
判断一台机器是大端序还是小端序
存储模式:大端模式和小端模式。大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。union型数据所占的空间等于其最大的成员所占的空间。对union型的成员的存取都是相对于该联合体基地址的偏移量为0处开始,也就是联合体的访问不原创 2014-09-25 16:41:24 · 5214 阅读 · 0 评论 -
C++中名字隐藏是什么?
让我们通过一个例子来讲解C++中的名字隐藏。在C++中,如果一个类里有一个重载的方法, 你用另一个类去继承它并重写(覆盖)那个方法。你必须重写所有的重载方法, 否则未被重写的方法会因为名字相同而被隐藏,从而使它在派生类中不可见。请看例子:1234567891011class FirstClass{public: virtual void MethodA(int);转载 2014-09-25 21:21:26 · 3129 阅读 · 0 评论 -
写一个名为my2DAlloc的函数,用它开辟一个二维数组
题目写一个名为my2DAlloc的函数,用它开辟一个二维数组。尽可能地少用malloc函数, 并确保可以用arr[i][j]这种形式来访问第i行第j列的元素。解答这道题目最简单的方法就是先开一个数组来存储指向每一行的指针, 然后再为每一行动态地分配空间。这是非常常见的动态申请二维数组空间的方法:123456int** My2DAlloc(int rows, in转载 2014-09-25 16:34:17 · 927 阅读 · 0 评论 -
C语言关键字”volatile”的意义(或重要性)
volatile的意思是”易变的”,因为访问寄存器比访问内存要快得多, 所以编译器一般都会做减少存取内存的优化。volatile 这个关键字会提醒编译器,它声明的变量随时可能发生变化(在外部被修改), 因此,与该变量相关的代码不要进行编译优化,以免出错。声明一个volatile变量:123volatile int x;int volatile x; 声明一个指针,指向volat转载 2014-09-25 21:26:29 · 790 阅读 · 0 评论 -
为什么基类中的析构函数要声明为虚析构函数?
题目为什么基类中的析构函数要声明为虚析构函数?解答用对象指针来调用一个函数,有以下两种情况:如果是虚函数,会调用派生类中的版本。如果是非虚函数,会调用指针所指类型的实现版本。析构函数也会遵循以上两种情况,因为析构函数也是函数嘛,不要把它看得太特殊。 当对象出了作用域或是我们删除对象指针,析构函数就会被调用。当派生类对象出了作用域,派生类的析构函数会先转载 2014-09-25 20:32:39 · 6409 阅读 · 0 评论 -
程序员对内存的理解
在C和C++语言开发中,指针、内存一直是学习的重点。因为C语言作为一种偏底层的中低级语言,提供了大量的内存直接操作的方法,这一方面使程序的灵活度最大化,同时也为bug埋下很多隐患。 因此,无论如何,我们都要对内存有一个清晰的理解。一、对内的分配 32位操作系统支持4GB内存的连续访问,但通常把内存分为两个2GB的空间,每个进程在运行时最大可以使用2GB的私有转载 2014-09-23 18:10:02 · 475 阅读 · 0 评论 -
C语言栈、堆、函数递归
一、栈栈是一个后进先出的压入(push)和弹出(pop)式数据结构。在程序运行时,系统每次向栈中压入一个对象,然后栈指针向下移动一个位置。当系统从栈中弹出一个对象时,最近进栈的对象将被弹出。然后栈指针向上移动一个位置。程序员经常利用栈这种数据结构来处理那些最适合用后进先出逻辑来描述的编程问题。这里讨论的程序中的栈在每个程序中都是存在的,它不需要程序员编写代码去维护,而是由运行是系统自动处理转载 2014-09-23 16:58:02 · 2314 阅读 · 0 评论 -
C++用new和不用new创建类对象区别
起初刚学C++时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题。当然这都是跟new的用法有关的。new创建类对象,使用完后需使用delete删除,跟申请内存类似。所以,new有时候又不太适合,比如在频繁调用场合,使用局部new类对象就不是个好选择,使用全局类对象或一个经过初始化的全局类指针似转载 2014-08-13 12:10:55 · 21671 阅读 · 0 评论 -
C/C++学习笔记:基础知识2
1 没有初始化的变量的初始值原创 2014-08-19 21:39:36 · 639 阅读 · 0 评论 -
C/C++学习笔记:基础知识4
1 引用引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。 申明一个引用的时候, 切记要对其进行初始化。 引用声明完毕后, 相当于目标变量名有两个名称, 即该目标原名称和引用名,不再把该引用名作为其他变量名的别名。 声明一个引用, 不是新定义了一个变量, 它只表示该引 用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给原创 2014-08-20 20:27:05 · 557 阅读 · 0 评论 -
C/C++学习笔记:基础知识6
1 复杂表达式与i++ 和 ++i 都不同于 i+1。如果你要使 i 自增 1, 使用 i=i+1, i+=1, i++ 或 ++i, 而不是任何组合。在上一个和下一个序列点之间, 一个对象所保存的值至多只能被表达式的计算修改一次。而且前一个值只能用于决定将要保存的值。例如 i = i+1 合法, 而 a[i] = i++ 则非法。原创 2014-08-21 20:54:13 · 559 阅读 · 0 评论 -
C/C++学习笔记:基础知识5
1 main函数(1)全局对象的构造函数会在 main 函数之前执行。原创 2014-08-20 21:16:15 · 518 阅读 · 0 评论 -
C/C++学习笔记:基础知识7
1 字符和字符串。在 C 语言中字符用它们的字符集值对应的小整数表示。因此, 你不需要任何转换函数: 如有你有字符, 你就有它的值。数字字符和它们对应的 0-9 的数字之间相互转换时, 加上或减去常数 ’0’, 也就是说, ’0’ 的字符值。strcat(string, "!"); //正确strcat(string, '!'); //错误, strcat()原创 2014-08-23 09:12:46 · 653 阅读 · 0 评论 -
C/C++学习笔记:基础知识8
1 C语言中const 关键字1 )const 修饰的只读变量定义const只读变量,具有不可变性。例如:const int Max=100;intArray[Max];这里请在Visual C++6.0里分别创建.c文件和.cpp文件测试一下。你会发现在.c文件中,编译器会提示出错,而在.cpp文件中则顺利运行。为什么呢?我们知道定义一个数组必须指定其元素的个数。这原创 2014-08-24 20:52:54 · 723 阅读 · 0 评论 -
C/C++学习笔记:字符串库函数
1 // 入门级char *strcpy(char *strDest, const char *strSrc){ if (NULL == strDest || NULL == strSrc) { return NULL; } if ( strDest == strSrc ) { return strDest; } char *tmpPtr = strDest;原创 2014-08-20 22:44:00 · 621 阅读 · 0 评论 -
C/C++学习笔记:基础知识10
1 栈、堆和静态区定义指针变量的同时最好初始化为NULL,用完指针之后也将指针变量的值设置为NULL。也就是说除了在使用时,别的时间都把指针“栓”到0地址处一般来说,可以简单的理解为内存分为三个部分:静态区,栈,堆。其实堆栈就是栈,而不是堆。堆的英文是heap;栈的英文是stack,也翻译为堆栈。堆和栈都有自己的特性。同样,内存也是这样,内存的三个部分,不是所有的东西都能存原创 2014-08-25 20:47:11 · 591 阅读 · 0 评论 -
C/C++学习笔记:基础知识9
如何将数值存储到指定的内存地址假设现在需要往内存0x12ff7c地址上存入一个整型数0x100int *p = (int *)0x12ff7c;*p = 0x100;//或者*(int *)0x12ff7c = 0x100;这里&a[0]和&a到底有什么区别呢?a[0]是一个元素,a是整个数组,虽然&a[0]和&a的值一样,但其意义不一样。前者是原创 2014-08-25 22:08:07 · 735 阅读 · 0 评论 -
C/C++学习笔记:基础知识
1. sizeof 和 strlen 的区别原创 2014-08-19 11:10:24 · 832 阅读 · 0 评论 -
虚函数和纯虚函数的作用与区别
虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtual void Eat(){……};转载 2014-09-22 15:16:16 · 466 阅读 · 0 评论 -
C/C++学习笔记:基础知识11
1 指针数组和数组指针(1) 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32位系统下永远是占4个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称int *p1[10];//“[]”的优先级比“*”要高。p1先与“[]”结合,构成一个数组的定原创 2014-08-27 19:04:53 · 624 阅读 · 0 评论 -
C++静态库与动态库
什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:图:编译过程静态库转载 2015-06-04 22:20:59 · 819 阅读 · 0 评论