c++读书笔记

现在我开始重学c++,为什么要学呢?不知道,也许心血来潮吧!反正技不压身。我要记读书笔记,这个原因我知道,因为学c#的时候都没记,好后悔!所以不能再后悔!言归正传

1.内存管理

内存分配方式有三种:

(1)       从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

(2)       在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

(3)       从堆上分配,亦称动态内存分配。程序在运行的时候用mallocnew申请任意多少的内存,程序员自己负责在何时用freedelete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

2.数组与指针的区别:

数组要么在静态存储区建立(如全局数组),要么在栈上建立,其地址和容量在生命周期内保持不变,只有其内容可变。而指针可以指向任何内存块,它的特征就是可变,所以我们常用指针来指向动态内存块。

3.常量指针与指针常量:

常量指针声明:const int *p或int const  *p

常量指针含义:常量指针指向的内容类型被限制为const型,即不会再变,但常量指针可以指向任意内存块,即存储的地址可以随意变。举个例子吧:

                     int a=3;      int  b=4;   const int *p=a;    *p=5;//错误,因为指针p指向的内容类型变为const型     a=4;//正确,可以这样改变a的值       p=b;//正确,p存储的地址可以变

指针常量声明:int  *const p

指针常量含义:指针常量意味着定义的指针是const型,那么必须有初始化,并且存储的地址不能再改变,但指针指向内容可以改变。还是举个例子:

                    int  a=3;    int b=4;    int *constp=a;//初始化是必须的   p=b;//错误,因为不能改变const类型指针  *p=6;//正确,指针指向内容可以变。

 4、c++中string对象的+操作符的左右操作数必须至少有一个是string类型的,为什么呢?

 答:因为只有在左操作数是该类类型的对象时,才会考虑使用作为类成员的重载操作符。

5、客串一下c#中string类型,众所周知:c#中string类型是引用类型,又众所周知:值类型如果附值的时候,是把自己的一个副本附给另一个变量,之后它们互不影响。而引用类型则是把它在堆栈中的地址复制一份给另一个变量,它们的指向仍是一样的,所以当对一个变量进行操作的时候会影响到另外一个变量。但下面代码怎样理解:

using System;
using System.Collections.Generic;

public class MyClass
{
    
public static void Main()
    
{
        
string s="abc";
        
string a=s;
        s
="def";
        Console.WriteLine(
"{0},{1}",a,s);
    }

    
}
 

如果你对string类型理解不深,会让你晕倒转向,一个引用类型怎么会表现出值类型的特征?我让msdn告诉你答案::“String 对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。看来似乎修改了 String 对象的方法实际上是返回一个包含修改内容的新 String 对象。”
明白了吧!

 

posted @ 2010-07-29 09:56  燃烧吧,少年  阅读(304)  评论(0编辑  收藏  举报