随笔分类 -  C/C++基础

摘要:前些日子深信服面试,面试官问到了如何调试段错误,一时还真不知道如何回答。虽然偶尔会遇到段错误,但都是程序运行提示段错误后回去修改代码,而没有深入去了解。段错误是什么? 参考维基百科,段错误的一个比较完整的定义如下:In computing, a segmentation fault (ofte... 阅读全文
posted @ 2015-10-05 11:15 峰子_仰望阳光 阅读(1494) 评论(0) 推荐(0) 编辑
摘要:本文转自博文如何实现一个malloc。就如作者本人所说,该博文大量参考了A malloc Tutorial,所以对照着阅读这两篇文章更能加深理解。 任何一个用过或学过C的人对malloc都不会陌生。大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉。但是,... 阅读全文
posted @ 2015-10-03 13:55 峰子_仰望阳光 阅读(2378) 评论(1) 推荐(1) 编辑
摘要:前些天参加深信服面试,面试官问了这样一个问题:浮点数的大小比较为什么不能用等号?那时就没回答好,因为自己一直把“浮点数大小比较不能够用等号”当做默认事实而没有去深究其背后原理。本文将试着解释这个事实。小数在计算机中的表示 计算机中是如何存储和表达数字的?对于整数,情况比较简单,直接按照数学中的... 阅读全文
posted @ 2015-10-01 16:54 峰子_仰望阳光 阅读(16294) 评论(2) 推荐(0) 编辑
摘要:本文转载自博文C/C++ Volatile关键词深度剖析。背景 前几天,发了一条如下的微博 (关于C/C++ Volatile关键词的使用建议): 此微博,引发了朋友们的大量讨论:赞同者有之;批评者有之;当然,更多的朋友,是希望我能更详细的解读C/C++ Volatile关键词,来佐证我... 阅读全文
posted @ 2015-10-01 11:17 峰子_仰望阳光 阅读(605) 评论(0) 推荐(0) 编辑
摘要:昨天百度面试,问了这样一道题: 对于一个有序字符串数组,用二分法查找某一字符串是否存在于该字符串数组中。函数原型为:bool BinarySearch(const vector& array, const string& target) 注意这里的有序指的是字典序,如字符串数组 a, ab,... 阅读全文
posted @ 2015-09-24 11:23 峰子_仰望阳光 阅读(351) 评论(0) 推荐(0) 编辑
摘要:在之前的一篇博文C++中的虚函数表是什么时期建立的?,我们知道虚函数表在编译期间就生成了,但是它被放置在可执行文件的什么地方呢?虚函数表放置位置 为了解决这个问题,我们先来看下C++对象模型。 在C++对象模型中,nonstatic data members被配置于每一个class obje... 阅读全文
posted @ 2015-09-15 00:22 峰子_仰望阳光 阅读(329) 评论(0) 推荐(0) 编辑
摘要:本文特记录C++中string类(注意string是一个类)的一些值得注意的地方。string类的实例是以‘\0'结束的吗? 这个问题有时还真容易混淆,因为我们可能会将 C++ 语言中的string类的实例跟 C 语言的字符串相混淆。在 C 语言中,字符串是以’\0'结束的字符数组。但C++还... 阅读全文
posted @ 2015-09-12 23:28 峰子_仰望阳光 阅读(476) 评论(0) 推荐(0) 编辑
摘要:本文整理自博文【C++专题】static_cast, dynamic_cast, const_cast探讨和c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast。 在C/C++中,类型转换可分为隐式类型转换和显示类型转换... 阅读全文
posted @ 2015-09-09 16:43 峰子_仰望阳光 阅读(238) 评论(0) 推荐(0) 编辑
摘要:大端小端概念 小端就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 大端就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 举一个例子,比如数字0x12 34 56 78在内存中的表示形式为: A. 大端模式: 低地址 -----------------> 高... 阅读全文
posted @ 2015-09-05 17:59 峰子_仰望阳光 阅读(659) 评论(0) 推荐(0) 编辑
摘要:最近遇到几道类似的笔试题: 1.请实现一个单例模式的类,要求线程安全。 2.用C++设计一个不能被继承的类。 3.如何定义一个只能在堆上(栈上)生成对象的类? 这些题目本质上都跟单例模式相关。单例模式 单例模式就是保证一个类只有一个实例,并提供一个访问它的全局访问点。首先,需要保证一个... 阅读全文
posted @ 2015-09-04 14:34 峰子_仰望阳光 阅读(4365) 评论(0) 推荐(2) 编辑
摘要:之前多多少少已经整理或写过了一些跟指针有关的博文: C++指针和引用 C++智能指针及其简单实现 函数指针和回调函数 指针和数组解析 指针的类型与指针所指向的类型但对指针还是感觉一知半懂,所以再补充些相关知识。指针作为函数参数 先看一个小例子1: 1 #include 2 #inc... 阅读全文
posted @ 2015-08-16 12:12 峰子_仰望阳光 阅读(630) 评论(0) 推荐(0) 编辑
摘要:指针的类型和指针所指向的类型很明显是不一样的东西,但好多情况下却容易忽视它们的区别。指针的类型是指针自身的类型,而指针所指向的类型是指针指向的数据(内存)的类型。指针的类型 从语法上来看,我们只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。如:1 int *ptr; ... 阅读全文
posted @ 2015-08-15 20:28 峰子_仰望阳光 阅读(8902) 评论(0) 推荐(0) 编辑
摘要:请看下边小程序:1 int i; // 定义性声明(defining declaration)或定义(definition)2 extern int j; // 引用性声明(referencing declaration)3 int *k = nullptr... 阅读全文
posted @ 2015-08-15 19:48 峰子_仰望阳光 阅读(250) 评论(0) 推荐(0) 编辑
摘要:常见strcpy实现 一个常见的strcpy实现如下: 1 char *my_strcpy(char *dst, const char *src) 2 { 3 if (dst == nullptr || src == nullptr) // 写成!dst或dst == 0都不推荐... 阅读全文
posted @ 2015-08-13 13:42 峰子_仰望阳光 阅读(451) 评论(0) 推荐(0) 编辑
摘要:本文只是粗浅讨论一下C++中的多重继承和虚拟继承。多重继承中的构造函数和析构函数调用次序 我们先来看一下简单的例子: 1 #include 2 using namespace std; 3 4 class A 5 { 6 private: 7 char idA; 8 9 publ... 阅读全文
posted @ 2015-08-06 17:26 峰子_仰望阳光 阅读(452) 评论(0) 推荐(0) 编辑
摘要:在一个程序中,函数调用需要一定的时间和空间(保护现场)的开销。当我们频繁调用小函数时,所造成的函数调用开销就相对(调用复杂函数)就比较大了,所以我们需要像C语言的宏定义函数一样(预编译时会有宏展开),将这些小函数代码(在编译时)复制到调用者中,以减少函数调用开销。为了做到这一步,我们需要在函数前... 阅读全文
posted @ 2015-08-06 00:17 峰子_仰望阳光 阅读(910) 评论(0) 推荐(0) 编辑
摘要:vector的简易实现整理自《数据结构与算法分析–C++描述(第3版)》3.4节“向量的实现”。详细可参考《STL源码分析》4.2节。 具体实现代码如下: 1 #ifndef VECTOR_H 2 #define VECTOR_H 3 4 #include 5 using nam... 阅读全文
posted @ 2015-08-05 23:48 峰子_仰望阳光 阅读(496) 评论(0) 推荐(0) 编辑
摘要:本文主要整理自stackoverflow上的一个对问题Meaning of “const” last in a C++ method declaration?的回答。测试1 对于下边的程序,关键字const的作用在哪里? 1 #include 2 3 class MyClass 4 { 5... 阅读全文
posted @ 2015-08-05 23:43 峰子_仰望阳光 阅读(1374) 评论(0) 推荐(0) 编辑
摘要:拷贝构造函数一个小例子 最近在《剑指Offer》上看到了一道题(程序如下),要求我们分析编译运行的结果,并提供3个选项: A. 编译错误; B. 编译成功,运行时程序崩溃;C. 编译运行正常,输出10。 1 #include 2 using namespace std; 3 4 class A... 阅读全文
posted @ 2015-08-04 10:29 峰子_仰望阳光 阅读(5334) 评论(3) 推荐(3) 编辑
摘要:指针和数组指针和数组是一样的吗? 经常可以看到“数组就是指针”、“数组名就是常量指针”这些说法,但真的是这样吗?让我们先看一下指针和数组的定义。 1. 指针 根据C99标准,指针的定义如下:A pointer type may be derived from a function type o... 阅读全文
posted @ 2015-07-29 00:55 峰子_仰望阳光 阅读(1499) 评论(0) 推荐(1) 编辑