C和C++
Sandeldeng
这个作者很懒,什么都没留下…
展开
-
实现一些字符串操作标准库函数、解决一些字符串问题
一、实现字符串操作标准库函数(1)、strcpy、strncpy、memmove、memcpy、memset、strlen、strncat 的实现// The strcpy() function copies the string pointed to by src, including the terminating null byte ('\0'), to the buffer//转载 2016-10-24 11:18:26 · 448 阅读 · 0 评论 -
C/C++使用心得:enum与int的相互转换
转载自:http://blog.csdn.net/lihao21 如何正确理解enum类型?例如:enum Color { red, white, blue}; Color x; 我们应说x是Color类型的,而不应将x理解成enumeration类型,更不应将其理解成int类型。我们再看enumeration类型:enum Color { red, white, blue}; (C程序转载 2016-10-18 18:31:56 · 441 阅读 · 0 评论 -
cin、get、getline、gets、getchar区分
学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息; 1、cin 1、cin.get() 2、cin.getline() 3、getline() 4、gets() 5、getchar()cin>> 用法1:最基本,也是最常用的用法,输入一个数字:#转载 2016-10-18 19:33:09 · 389 阅读 · 0 评论 -
c++::让你足够了解构造函数和this指针
一、 this指针 【特性】 1、this指针的类型 类类型*const(类名*const),为右值 2、this指针并不是对象本身的一部分,不影响sizeof的结 果。 3、this的作用域在类成员函数的内部。 4、this指针是类成员函数的第一个默认隐含参数,编译 器自动维护传递,类编写者不能显式传递。 5、只有在类的非静态成员函数中才可以使用this指针, 其它任何函数都不转载 2016-10-18 19:49:50 · 2569 阅读 · 0 评论 -
c::预处理
【预处理】 预处理语句是一些行首以#开始的特殊语句,例如:#include,#define等就是预处理语句。在编译程序的编译过程中,进行其它编译处理(词法分析、语法分析、代码生成、优化和连接等)之前,先进行这些语句的分析处理。预处理语句使用的目的在于帮助程序员编写出易读、易改、易移植并便于调试的程序。预处理语句主要有三种:宏定义和宏替换、文件包含、条件编译。,宏包含宏常量,宏函数,条件编译。转载 2016-10-18 20:36:35 · 610 阅读 · 0 评论 -
C++对象内存分配问题
如果一个人自称为程序高手,却对内存一无所知,那么我可以告诉你,他一定在吹牛。用C或C++写程序,需要更多地关注内存,这不仅仅是因为内存的分配是否合理直接影响着程序的效率和性能,更为主要的是,当我们操作内存的时候一不小心就会出现问题,而且很多时候,这些问题都是不易发觉的,比如内存泄漏,比如悬挂指针。笔者今天在这里并不是要讨论如何避免这些问题,而是想从另外一个角度来认识C++内存对象。 我们知道,C转载 2016-10-18 22:14:26 · 1988 阅读 · 0 评论 -
分清operator new和new operator
在C++中new operator与operator new非一回事也,new operator(即所谓的new expression)乃语言内建,咱们是没法改变其行为的,当你写string *ps = new string(“Hands up!”)时,你所使用的new是所谓的new operator, 一、分配足够的内存(实际大小是大于所创建的对象大小) 二、调用对象构造函数,new oper转载 2016-10-19 10:56:03 · 482 阅读 · 0 评论 -
构造函数
ARM寄存器 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个状态寄存器都是可访问的。ARM状态下的通用寄存器与程序计数器 ARM状态下的程序寄存器 通用寄存器R0~R15R13_svc、R1原创 2016-10-29 10:47:16 · 364 阅读 · 0 评论 -
深度探索C++对象模型(三)Data语意学
(一)Data Member的布局Nonstatic data members在class object 中的排列顺序将和其被声明的顺序一样,任何中间介入的static data members都不会被放进对象布局之中。static data members存放在程序的data segment中,和个别的class objects无关。C++ Standard要求,在同一个access sectio原创 2016-10-29 20:05:17 · 773 阅读 · 0 评论 -
深度探索C++对象模型(四)Function语意学
C++支持三种类型member functions:static、nonstatic和virtual,每一种类型被调用的方式都不相同。 (一)Member的各种调用方式1、Nonstatic Member Functions(非静态成员函数) C++的设计准则之一就是:nonstatic member function至少必须和一般的nonmember function有相同的效率。也就是说,如原创 2016-10-29 22:13:57 · 688 阅读 · 0 评论 -
深度探索C++对象模型(五)构造、析构、拷贝语意学
考虑下面这个abstract base class声明:class Abstract_base{public: virtual ~Abstract_base()=0; virtual void interface() const =0; virtual const char* mumble() const {return _mumble;}protected:原创 2016-10-30 11:34:04 · 807 阅读 · 0 评论 -
深度探索C++对象模型(六) 执行期语意学
(一)对象的构造和析构(Object Construction and Destruction) 一般而言我们会把object尽可能放置在使用它的那个程序区段附近,这么做可以节省非必要的对象产生操作和摧毁操作。 全局对象 如果我们有以下程序片段:Matrix identitymain(){ //identity 必须在此处被初始化 Matrix m1=identity;原创 2016-10-30 21:31:59 · 1473 阅读 · 0 评论 -
C++的const类成员函数
转载自:http://blog.csdn.net/lihao21 我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误。例如,const char blank = ‘’; blank = ‘\n’; // 错误 面向对象程序设计中,为了体现封装性,通常不允许直接修改类对象的数据成员。若要修改类对象,应调用公有成员函数来完成。为了保证const对象的转载 2016-10-18 17:06:11 · 182 阅读 · 0 评论 -
C++空类的大小
转载自http://blog.csdn.net/lihao21/article/details/47973609 本文中所说是C++的空类是指这个类不带任何数据,即类中没有非静态(non-static)数据成员变量,没有虚函数(virtual function),也没有虚基类(virtual base class)。 直观地看,空类对象不使用任何空间,因为没有任何隶属对象的数据需要存储。然而,转载 2016-10-17 22:46:10 · 316 阅读 · 0 评论 -
windows下LIB和DLL的区别与使用
共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。 一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。 共有两种链接方式: 动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包转载 2016-10-24 21:30:43 · 533 阅读 · 0 评论 -
Linux下动态库(.so)和静态库(.a) 的区别(略有增删减)
linux下有两种库:动态库和静态库(共享库) 二者的不同点在于代码被载入的时刻不同。 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大。 动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。 不同的应用程序如果调用相同的库,那么在内存中只需要有一份该动态库(共享库)的实例。 静态库和动态库的最大区别,静态情况下,把库直接加载到程序转载 2016-10-24 21:54:57 · 938 阅读 · 0 评论 -
C++模板类内友元(友元函数,友元类)声明的三种情况
根据《C++ Primer》第三版16.4节的叙述,C++类模板友元分为以下几种情况 1.非模板友元类或友元函数。 书上给了一个例子:class Foo{ void bar();};template <class T>class QueueItem{ friend class foobar; friend void foo(); friend void F转载 2016-10-24 22:02:39 · 960 阅读 · 0 评论 -
C++中四种类型转换以及const_cast是否能改变常量的问题
we have four specific casting operators:dynamic_cast, reinterpret_cast, static_cast and const_cast. Their format is to follow the new type enclosed between angle-brackets (<>) and immediately after, th转载 2016-10-24 22:09:47 · 577 阅读 · 0 评论 -
C++的引用与const指针的关系以及各种传递方式
首先我们知道 const int p 与 int const *p 是一样的,即 *p 是常量;而 int const p 跟上面是不一样的,即 p 是常量;我们知道引用只是一个别名,与变量共享存储空间,并且必须在定义的时候初始化,而且不能再成为别的变量的别名,这让我们想到什么呢,貌似跟 int * const p 的性质很像。其实引用的底层就是用const指针来实现的。下面举个小例子:#i转载 2016-10-24 23:02:10 · 1036 阅读 · 0 评论 -
比较显式调用构造函数和析构函数
1.首先看如下的代码,显式调用析构函数:#include <iostream>using namespace std;class MyClass{public: MyClass() { n_ = 1; cout << "Constructors" << endl; } ~MyClass() { cout <转载 2016-10-24 23:23:55 · 375 阅读 · 0 评论 -
c/c++基础零散补充
一、C语言的指针与数组、结构体里的成员数组和指针、传入传出参数、回调函数、头文件包含指针的本质都只是一个内存地址,如果是多字节变量,则是其内存首地址(低地址),但指针的类型决定了如pa++此类的表达式跨越的内存字节数以及通过pa可以访问到的内存大小。指针之间的比较运算比的是地址,C语言正是这样规定的,不过C语言的规定更为严谨,只有指向同一个数组中元素的指针之间相互比较才有意义,否则没有意义。那么两个转载 2016-10-24 23:38:19 · 485 阅读 · 0 评论 -
什么是字节对齐,为什么要字节对齐?
http://blog.csdn.net/xhfwr/archive/2006/07/23/963793.aspx 一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排转载 2016-10-17 22:23:31 · 1012 阅读 · 0 评论 -
C++虚函数表剖析
转载出处: http://blog.csdn.net/lihao21 关键词:虚函数,虚表,虚表指针,动态绑定,多态 一、概述 为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。 二、类的虚表 每个包含了虚函数的类都包含一个虚表。 我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用转载 2016-10-17 22:34:25 · 220 阅读 · 0 评论 -
C++虚拟函数
在所有对C++的批评中,虚拟函数这一部分是最复杂的。这主要是由于C++中复杂的机制所引起的。虽然本篇文章认为多态 (polymorphism)是实现面向对象编程(OOP)的关键特性,但还是请你不要对此观点(即虚拟函数机制是C++中的一大败笔)感到有什么不安, 继续看下去,如果你仅仅想知道一个大概的话,那么你也可以跳过此节。【译者注:建议大家还是看看这节会比较好】 在C++中,当子类改写 /重定义(o转载 2016-10-17 22:40:55 · 624 阅读 · 0 评论 -
深度探索C++对象模型(七)站在对象模型的尖端
如果我们定义一个指针,指向特定的实例,像这样:Point<float> *ptr=0;程序中什么也没有发生。为什么呢?因为一个指向class object的指针,本身并不是一个class object,编译器不需要知道与该class有关的任何members的数据或object布局数据。所以将“Point的一个float实例”实例化也就没有必要了。在C++ Standard完成之前,“声明一个指针指向原创 2016-10-31 12:57:28 · 405 阅读 · 0 评论