c++指针再探究

来源:互联网 发布:知柏地黄丸与难入睡 编辑:程序博客网 时间:2024/04/30 14:33

c++中对指针又有了一定的扩展,特别是c11中又对智能指针进行了一些定义修改,所以在这里向重新复习下c++中的指针,便于加深对c和c++两者之间指针不同的一些理解。

1:
int *pt=new int;
pt是指针。*pt不是指针,而是完全等同于一个int类型的变量。

2:
对指针解除引用:对指针解除引用意味着取指针指向地址的值。有两种方法来对指针解除引用。一是用间接运算符(*),二是用数组表示法。绝对不能对未初始化为适当地址的指针解除引用。

3:
数组的动态联编和静态联编。
使用数组声明来创建数组时,将采用静态联编,即数组在创建时设定了长度:int a[10];
使用new[]来创建数组,将采用动态联编,即将在运行时为数组分配空间。数组长度也将在运行时确定。使用完数组以后,使用delete[]来释放空间。

4:
对于.和->的使用区别。如果结构标示符是结构名,则使用句点运算符;如果标示符是指向结构的指针,则使用箭头运算符.

5:
自动存储,静态存储,动态存储。
在函数内部定义的变量使用自动存储空间。函数执行时自动产生,函数执行完毕自动消亡。自动变量通常存储在栈中。当执行代码块时,变量依次载入到栈中。当代码块执行完毕后,变量按照相反的顺序出栈。这称为先进后出。

静态存储指在整个程序运行过程中都存在的存储方式。有两种使用方式。一种是在函数外申明。一种是在声明变量的时使用static关键字。

动态存储是用new和delete运算符来操作的更为灵活的方式。它们管理一个内存池,在c++中称为自由空间或者堆。这个内存池中关于静态变量和动态变量的存储空间是分开的。由于使用new和delete来操作,变量的生命周期不完全收函数或程序的生存时间控制。动态存储可以让程序员更自由的操作,但同时也加大了对内存管理的难度。在栈中,自动添加和删除机制使得内存使用总是连续的,但new和delete的操作导致占用的内存存储区不连续。

未完,后有新的笔记将上传

0 0