![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C和C++知识详解
默伊清风
这个作者很懒,什么都没留下…
展开
-
strcpy、memcpy、memmove
今天1、原创 2014-08-21 19:51:51 · 584 阅读 · 0 评论 -
深入理解C++的动态绑定和静态绑定
为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。关于对象的静态类型和动态类型,看一个示例:[cpp] vi转载 2014-10-14 07:35:24 · 892 阅读 · 0 评论 -
内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
堆和栈的区别一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)转载 2014-10-03 17:32:14 · 538 阅读 · 0 评论 -
面试中经典函数的实现
很多经典的库函数如strcpy,memcpy等在面试中经常出现,虽然思想并不复杂,但要写出一个比较完善甚至是完全正确的程序非常考验一个程序员思维的严谨性和编程的风格,这里简单实现strcpy、strncpy、memcpy、memmove、memset、strlen等函数,仅供参考。一 字符串复制strcpy strcpy函数把一个字符串的内容复制到另一个字符串里,以'\0'作转载 2014-06-11 19:19:06 · 638 阅读 · 0 评论 -
C语言可变参数函数的实现
这道题的关键是理解函数参数的压栈顺序:1、函数的参数是从右到左压栈;2、栈的生长方向是从上到下(即从高地址往低地址)3、printf(char *fmt,...) fmt 是放在栈顶(最低地址),第二个参数是高一个地址,4、第二个参数的获取方法是 (char *)&fmt + sizeof(fmt) ,这个就是第二个参数的地址,第二个参数是什么类型就用什么类型取原创 2014-10-04 00:16:21 · 686 阅读 · 0 评论 -
大小端模式
小字节序:(比如x86体系) 数据的低字节放在低地址处,比如一个整型数0x12345678,在内存中的 分布为: ----------- | 78 | xxxx_0000 ----------- | 5原创 2014-10-04 01:31:30 · 583 阅读 · 0 评论 -
C++中虚函数工作原理和(虚)继承类的内存占用大小计算
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7883531一、虚函数的工作原理 虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数。典型情况下,这一信息具有一种被称为 vptr(virtual table pointer,虚函数表指针)的指针的形式。vptr 指向一转载 2014-10-13 00:30:53 · 513 阅读 · 0 评论 -
c++中strstr函数的几种实现方法
函数说明:包含文件:string.h函数名: strstr函数原型:extern char *strstr(char *str1, char *str2);功能:从字符串str1中查找是否有字符串str2, 如果有,从str1中的str2位置起,返回str1的指针,如果没有,返回null。返回值:返回该位置的指针,如找不到,返回空指针。原创 2014-10-04 15:42:21 · 5702 阅读 · 0 评论 -
C++学习之深入理解虚函数--虚函数表解析
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,转载 2014-10-15 20:46:58 · 545 阅读 · 0 评论 -
Windows内存管理的方法
一、先说说内存的概念1.物理内存:即插在主板上的内存条。他是固定的,内存条的容量多大,物理内存就有多大(集成显卡系统除外)。但是如果程序运行很多或者程序本身很大的话,就会导致大量的物理内存占用,甚至导致物理内存消耗殆尽。2.虚拟内存:虚拟内存就是在硬盘上划分一块页面文件,充当内存。当程序在运行时,有一部分资源还没有用上或者同时打开几个程序却只操作其中一个程序时,系统没必要将程序所有转载 2014-10-21 23:49:22 · 697 阅读 · 0 评论 -
C++中构造函数和析构函数避免调用虚函数的问题
一、构造函数避免调用虚函数的问题在构造函数中调用虚成员函数,虽然这是个不很常用的技术,但研究一下可以加深对虚函数机制及对象构造过程的理解。这个问题也和一般直观上的认识有所差异。先看看下面的两个类定义。struct C180{ C180() { foo(); this->foo(); } virtual foo() { cout << "<< C180.foo t转载 2014-11-07 00:43:20 · 707 阅读 · 0 评论 -
统计单词个数———有穷状态机编程
有穷状态机的形式定义有穷状态机是一个五元组 (Q,Σ,δ,q0,F),其中:Q是一个有穷集合,称为状态集。Σ是一个有穷集合,称为字母表。δ: Q xΣQ称为状态转移函数。q0 是初始状态。F 是接受状态集。教科书上是这样定义有穷自动机的,这个形式定义精确的描述了有穷状态机的含义。但是大部分人(包括我自己)第一次看到它时,反复的读上几遍,仍然不知道它在说什么。幸原创 2014-11-07 00:23:04 · 2933 阅读 · 0 评论 -
常见C中转义字符
所有的ASCII码都可以用“/”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"/"来表示常见的那些不能显示的ASCII字符,如/0,/t,/n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。 转义字符 意义 ASCII码值(十进制) /a 响铃(BEL) 007 /b 退格(BS) 008 /f 换页(FF) 012 /n 换行(L原创 2014-10-10 22:43:11 · 1057 阅读 · 0 评论 -
C++中public,protected,private访问
第一:private, public, protected 访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。public:可以被1.该类中的函数、2.子类的函数、3.其友转载 2014-10-01 00:08:50 · 764 阅读 · 0 评论 -
C/C++内存对齐
一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据转载 2014-09-08 21:53:25 · 411 阅读 · 0 评论 -
C语言程序的内存布局
C语言程序的内存布局一:C语言程序的存储区域 C语言编写的程序经过编绎-链接后,将形成一个统一的文件,它由几个部分组成,在程序运行时又会产生几个其他部分,各个部分代表了不同的存储区域: 1.代码段(Code or Text): 代码段由程序中的机器码组成。在C语言中,程序语句进行编译后,形成机器代码。在执行程序的过程中,CPU的程序计数器指向转载 2014-09-12 13:52:12 · 675 阅读 · 0 评论 -
C++类的静态成员
一、基本介绍原创 2014-09-12 21:57:38 · 609 阅读 · 0 评论 -
C/C++内存对齐
C/C++内存对齐参考资料:http://wenku.baidu.com/view/8eaaa26925c52cc58bd6bed2.html一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排转载 2014-10-05 01:04:58 · 451 阅读 · 0 评论 -
浅析为什么char类型的范围是 —128~+127
在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗: -2^(n-1)~2^(n-1)-1 n为整型的内存占用位数,所以int类型32位 那么就是 -(2^31)~2^31 -1 即 -21转载 2014-10-06 12:46:43 · 639 阅读 · 0 评论 -
原码, 反码, 补码 详解
http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html原码, 反码, 补码 详解本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正转载 2014-10-06 14:23:22 · 550 阅读 · 0 评论 -
C++中智能指针的设计和使用
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7561235 智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对转载 2014-10-24 01:39:39 · 592 阅读 · 0 评论 -
Const对函数的作用
看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设转载 2014-09-29 01:05:43 · 909 阅读 · 0 评论 -
memcpy,memmove,strcpy,strcat等系列函数的实现(一)
一、memcpy函数: 1、定义函数: void *memcpy(void *dest, const void *src, size_t n)函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。 与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束注: memcp原创 2014-10-07 00:17:33 · 966 阅读 · 0 评论 -
memcpy,memmove,strcpy,strcat等系列函数的实现(二)
、strcat函数: 1、定义函数:extern char *strcat(char *dest,char *src);把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。注:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。2、函数用法实例(略):3、函数实现:#includ原创 2014-10-07 13:17:15 · 723 阅读 · 0 评论 -
C++虚函数表详细解释及实例分析
C++的虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖(override)的问题,保证其能真实的反应实际的函数。这样,在有虚函数的类的实例中这张表被分配在了这个实例的内存中,所以当我们用父类的指针操作一个子类的时候,这张虚函数表就显得尤为重要了,他就像一个地图转载 2014-10-01 00:54:51 · 596 阅读 · 0 评论 -
C++ 11右值引用
C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是转载 2014-11-07 23:16:36 · 518 阅读 · 0 评论