指针,内存存储及const使用

来源:互联网 发布:素描网络课程 编辑:程序博客网 时间:2024/05/13 18:18

指针,内存存储及const使用

一 指针的使用

[申明指针]
type *pointername;
如int *pVariant;
[初始化指针]
(1)可以将变量名应用&操作赋,将变量的地址赋给指针,来获取被命名的内存的地址
(2)使用new操作符返回未命名的内存地址赋给指针
[注意事项]
指针申明后,在编译阶段系统并没有对指针分配内存空间,直接对指针变量pVariant赋初值会出现Segmentation fault 例如:int *pVariant=4; 原因是系统还没有分配内存给pVariant,所以没有地方存放常数4

与普通变量初始化不同如int pVariant;编译阶段,系统就分配了内存给变量pVariant,所以可以进行操作pVariant=4;

二 C++的三种管理内存的方式

自动存储, 静态存储, 动态存储(有时也叫做自由存储空间或堆)
1 自动存储方式----内存在栈上创建
在函数内部定义的常规变量使用自动存储空间,也被称为自动变量(automatic variable),他们在所属的函数被调用时自动产生,在该函数结束时消亡。

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

3 动态内存存储---从堆上分配内存
一种比自动变量和静态变量更灵活的方法,从一个内存池中申请分配内存。程序在运行的时候用malloc或new从内存池中申请任意多少的内存,内存池同用于静态分配和从栈上分配的内存是分开的。malloc或new允许在一个函数中分配内存,而在另一个函数中用free或delete释放内存,因此数据的生命周期不完全受到程序或函数的生命周期的控制了。与常规变量相比,使用new和delete使程序员对程序如何使用内存有更大的控制权。

三 const使用


int nVariable;          //编译阶段已经在栈上分配了内存,所以地址&nVariable不可变,地址对应的值nVariable可变const int nVariable;    //地址&nVariable不可变,值nVariable也不可变,所以一般使用是申明和初始化同时进行,如const int nVariable=3;int *pVariable; //编译阶段没有分配内存,所以地址pVariable可变,地址pVariable指向的值value也可变。初始化有两种方式,见上面。//结合const 就有三种情况const int *pVariable; //地址pVariable可变,地址pVariable指向的value不变, 如pVariable=new int;int *const pVariable; //这是一个常指针,不可以进行++或者--操作,地址pVariable不可变,地址指向的值value不变const int *const pVariable; //地址pVariable不变,指向的值也不变。


0 0
原创粉丝点击