随笔分类 -  编程学习-C/C++

摘要:void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。 void指针使用规范 ①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。例如: int * pint; void *pvoi... 阅读全文
posted @ 2013-08-07 10:49 jiayouwyhit 阅读(257) 评论(0) 推荐(0) 编辑
摘要:1. 一个经典实例 1 /* 2 用法:const_cast (expression) 3 该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。 4 一、常量指针被转化成非常量指针,并且仍然指向原来的对象; 5 二、常量引用被转换成非常量引用,并且仍然指向原来的对象; 6 三、常量对象被转换成非常量对象。 7 type_id 必须为指针或引用 8 */ 9 class B10 {11 public:12 int m_iNum;13 B():m_iNum(5... 阅读全文
posted @ 2013-08-07 10:25 jiayouwyhit 阅读(295) 评论(0) 推荐(0) 编辑
摘要:1. free store VS heapfree store (自由存储区)和 heap (堆),在C/C++中经常会遇到。他们是否有区别呢?偶最早发现这两个概念性问题是在《Exceptional C++》一书中。其中提到C++中使用new分配所得的内存是分配在 freestore 上,而C 风格的内存分配 malloc 分配所得的内存是在 heap 上。额。这个有什么区别呢?通过在 Google 的搜索,所得的中文资料相当少,英文的倒是不少,而且不少还有争议性质。不过部分观点是已经达成共识的。这里,作为翻译,略微加上一点自己的思想,写在这里——首先呢,有必要知道malloc内存分配和new 阅读全文
posted @ 2013-08-06 22:33 jiayouwyhit 阅读(1844) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2013-08-06 20:16 jiayouwyhit 阅读(3465) 评论(0) 推荐(0) 编辑
摘要:根据《C++ Primier》P39及其习题的解答,综合总结左值右值的概念如下:(1)左值:左值就是变量的地址,或者是一个代表“对象在内存中的位置”的表达式。左值可以出现在赋值语句的左边或者右边;(2)右值:右值就是变量的值,右值只能出现在赋值语句的右边,不能出现在赋值语句的左边,只可在左边。对于一个变量名来说,其出现在赋值语句的左边,就是一个左值;而出现在赋值运算符右边的变量名或者字面常量就是一个右值。例如: val1 = val2/15;这里的val1就是一个左值,而val2和15就是右值。1. C++左值与右值概念变量和文字常量都有存储区,并且有相关的类型,区别在于变量是可寻址的;对于每 阅读全文
posted @ 2013-08-05 16:54 jiayouwyhit 阅读(951) 评论(0) 推荐(0) 编辑
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/关于默认构造函数的一些内容补充:1.C++规定,每个类必须有默认的构造函数,没有构造函数就不能创建对象。2.若没有提供任何构造函数,那么c++提供自动提供一个默认的构造函数,该默认构造函数是一个没有参数的构造函数,它仅仅负责创建对象而不做任何赋值操作。3.只要类中提供了任意一个构造函数,那么c++就不自动提供默认构造函数。4.类对象的定义和变量的定义类似,使用默认构造函数创建对象的时候,如果创建的是静态或者是全局对象,则对象的位模式全部为0,否则将会是随机的。1.什么是默认构造函数?一个函数是默认构造函数当且 阅读全文
posted @ 2013-08-04 10:54 jiayouwyhit 阅读(808) 评论(0) 推荐(0) 编辑
摘要:《C++Primer》第四版 2.3.5节中这么说到:①变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。②变量声明:用于向程序表明变量的类型和名字。③定义也是声明:当定义变量时我们声明了它的类型和名字。④extern关键字:通过使用extern关键字声明变量名而不定义它。1.定义也是声明,分配了存储空间;而extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方定义了。例如:extern int i; //声明,不是定义, int i; //声明,也是定义也可以这么理解:变量的“声明”有两种情况:1、一种是需要建立存储空间的。例如: 阅读全文
posted @ 2013-08-03 22:11 jiayouwyhit 阅读(266) 评论(0) 推荐(0) 编辑
摘要:之前看帖子,发现许多时候基本上大家都把求模和求余混为一谈了。但实际上二者的概念是有区别的 1. 求余 在C语言中,求余对应的操作符是%,且a%b求余的最后结果总是与a符号相同,最后的数值为|a|%|b|。 故而 12%256=12; -12%256=-12; -12%-256 = –12; 12%-256 =12; 2. 求... 阅读全文
posted @ 2013-08-02 17:13 jiayouwyhit 阅读(687) 评论(0) 推荐(0) 编辑
摘要:在C语言中,数值常数可以是3中形式: (1)在数值前面加0表示的是8进制数据; (2)在数字前面加0x表示的是16进制数; (3)在数值前面什么也不加,表示的是10进制数值。 目前C语言规定的整数数值只能用这3中表示方法。 例如,我们相对某一个变量a赋值为48,则可以是以下几种形式: int a = 48; int a = 060; int a = 0x0011000... 阅读全文
posted @ 2013-07-31 17:06 jiayouwyhit 阅读(1018) 评论(0) 推荐(0) 编辑
摘要:位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。同时需要尤其指出的是:位运算都是针对各个数值的补码进行位运算操作,因此,对负数进行位运算也是可以的。 补码的求解方式为:正数的补码就是其本身,负数的补码是对除了符号位(最高位)以外的其它各个位进行按位取反操作,然后再对结果进行加1,即得到负数的补... 阅读全文
posted @ 2013-07-31 16:59 jiayouwyhit 阅读(421) 评论(0) 推荐(0) 编辑
摘要:1.一维数组初始化 对于一维数组,其初始化有一个错误的观点是:一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1. 数组可以用一个列值来初始化,例如 int v1[] ={1,2,3,4}; char v2[]={'a','b','c',0}; 当数组定义时没有... 阅读全文
posted @ 2013-07-31 10:35 jiayouwyhit 阅读(1192) 评论(0) 推荐(0) 编辑
摘要:1.关于常用内存申请函数的说明 (1) 各个动态内存申请函数简要说明 malloc 分配指定字节数的存储区。此存储区中的初始值不确定。 calloc 为指定长度的对象,分配能容纳其指定个数的存储空间。该空间中的每一位(bit)都初始化为0。 realloc 更改以前分配区的长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新... 阅读全文
posted @ 2013-07-29 22:23 jiayouwyhit 阅读(1423) 评论(0) 推荐(0) 编辑
摘要:2. 第一节 习惯C++2.1 C++是一个语言联邦,包括以下四个部分: C:包括区块、语句、预处理器、内置数据类型、数组、指针等,但是C语言本身存在局限:没有模板template、没有异常exception、没有重载overloading……. Object-oriented C++: 这部分主要... 阅读全文
posted @ 2013-07-29 10:55 jiayouwyhit 阅读(286) 评论(0) 推荐(0) 编辑
摘要:1. 导读部分 (1) default 构造函数是一个可以被调用而不用带任何实参的函数。这样的构造函数要么就是没有参数,要么就是每个参数都有缺省值。 (2)关于explicit关键字 该关键字用于申明构造函数之前,主要是为了禁止构造函数被用于隐式类型转换,比如上文例子中的doSomething(28). 但是这个并不是说进行显式类型转换,例如doSomething(B(28))。... 阅读全文
posted @ 2013-07-28 15:45 jiayouwyhit 阅读(256) 评论(0) 推荐(0) 编辑
摘要:分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student //注意,此处的student可以省略 { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) ... 阅读全文
posted @ 2013-07-26 15:58 jiayouwyhit 阅读(227) 评论(0) 推荐(0) 编辑
摘要:补充:typedef和#define的区别 相同点:都可以为某一个数据类型创建一个自己喜欢的名字,如: # define UNCHAR unsigned char 等同于 typedef unsigned char UNCHAR;(注意,有分号) 不同点: (1)typedef给出的符号名仅限于对类型,而不是对值,而#define可以对值; (2)typedef的解释由编译器,#defi... 阅读全文
posted @ 2013-07-13 16:34 jiayouwyhit 阅读(351) 评论(0) 推荐(0) 编辑
摘要:对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=88; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。 C++中对象的复制就如同“克隆”,用一个已有的对象快速地复制出多个完全相同的对象。一般而言,以下三种情况都会使用到对象的复制,在这些复制过程中,会自动调用拷贝构造函数: (1)建立一个新对象,并用另一个同... 阅读全文
posted @ 2013-06-23 17:47 jiayouwyhit 阅读(274) 评论(0) 推荐(0) 编辑
摘要:malloc 与free 是C++/C 语言的标准库函数,new/delete 是C++的运算符.他们都可以用于申请动态内存和释放内存。 对于非内部数据类型的对象(如类对象)而言,光用malloc/free 无法满足动态对象的要求.对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能... 阅读全文
posted @ 2013-06-23 13:37 jiayouwyhit 阅读(230) 评论(0) 推荐(0) 编辑
摘要:[cpp]view plaincopy float a = 1.0f; cout < < (int)a < < endl; cout < < (int&)a < < endl; cout < < boola... 阅读全文
posted @ 2013-06-21 16:04 jiayouwyhit 阅读(452) 评论(0) 推荐(0) 编辑
摘要:转载于http://blog.163.com/yql_bl/blog/static/847851692008112013117685/ 因为要参加软考了(当然也只有考试有这种魅力),我得了概浮点数转化为二进制表示这个最难的知识点(个人认为最难)。俺结合大量的从网上收集而来的资料现整理如下,希望对此知识点感兴趣的pfan有所帮助。 基础知... 阅读全文
posted @ 2013-06-21 15:23 jiayouwyhit 阅读(19572) 评论(2) 推荐(2) 编辑