乐趣区

关于基础:C-Primer-Plus复合类型

指针和自在存储空间

指针是一个变量,其存储的是值的地址,而不是值自身

应用惯例变量时,值是指定的量,而地址是派生量,而指针相同

OOP强调的是在运行阶段(而不是编译阶段)进行决策,提供了灵活性,对于内存治理也更加高效

初始化指针

int* ptr_a;
double* ptr_b;

初始化时必须指定所指元素类型,因为对所有指针来说其都是代表一个初始地址,但从该初始地址读多少字节则由指针类型判断

指针注意事项

在 C ++ 中创立指针时,计算机将调配用来存储地址的内存,但不会调配用来存储指针所指向的数据的内存(指向不确定)。另外,肯定要在对指针解除援用运算符(*)之前,将指针初始化为一个确定的、适当的地址。

指针不是整型,尽管计算机通常把地址当作整数解决。

int* pt;
pt = 0xB80000000; //invalid, type mismatch
pt = (int*)0xB80000000; //valid, type match

应用 new 来分配内存

//typeName * pointer_name = new typeName
int* pn = new int;

new运算符依据类型来确定须要多少字节的内存,找到这样的内存并返回

typeName*指申明什么类型的指针,左右两侧的类型必须雷同,否则因为读取的块大小不同而拜访谬误

变量存储在称为栈(stack)的内存区域中,new 从被称为堆(heap)或自在存储(free store)的内存区域分配内存

应用 delete 开释内存

int* ps = new int;
delete ps;

这将删除 ps 所指向的内存,但不会删除 ps 自身,ps 还可指向其余内存空间

须要留神的是:

  • 不要应用 delete 来开释不是 new 调配的内存
  • 不要应用 delete 开释同一个内存两次
  • 对空指针 (null pointer) 应用 delete 是平安的

应用 new 创立动静数组

int* psome = new int [10];
delete [] psome;

数组间接通过 psome[num] 拜访

须要留神的是:

  • 如果应用 new [] 为数组分配内存,则须要通过 delete [] 来开释
  • 如果应用 new 为一个实体分配内存,则应应用 delete 来开释
退出移动版