存储数据三个基本属性:数据的类型,数据存储的位置,数据的值。
-
-
指针介绍
定义:存储值得地址。
格式:与一般的数据定义结合形式如下: Int update=5; Int * pt;pt=&update; Int * pt; Int *pt=&update;
-
-
声明及初始化
与一般数据定义结合声明如上。
对于声明中的*其两边的空格可有可无。
指针的声明必须声明指针的地址,如果只初始化指针指向的数值或者两者都不定义是错误的。如下例子是错误的:
Int *pt;
*pt=2343:
指针不是整型,不可以进行赋值和算数运算,不可简单的将值赋值给指针,但进行强制类型转化后可以:
Int *pt;
pt= 0x00829128; //valid
pt=(int *) 0x00829128; //invalid
-
分配和释放内存
上述都是对已命名的内存进行指针命名,指针的真正用处是对未命名的内存以存储值,对正在运行的程序释放内存。
其释放格式如下:
typename * pointer_name= new typename;
*new 变量声明的内存块与常规变量声明的内存块不同,常规变量及基于常规变量的指向指针存储在栈(stack)的内存区域,而new 声明的内存块存储在堆(heap)的自由存储区(free store)内。
使用了new定义'内存块后,使用完需释放内存块,这时只需要在使用完调用"delete 指针名称"即可。
对于使用delete需要注意的事项:
配对使用new和delete,否则未配对只使用new会发生内存泄漏;
不要重复释放,即过量使用delete释放;也不能释放声明变量对应的指针。
-
动态数组和指针的简单结合
使用new来创建一个包含n 个某种类型的数组的指针的形式是:
typename * pointer_name= new typename [n];
删除指针的内存块形式是:
delete [] pointer_name;
对于new创建的指针数组,其pointer_name指向数组中第一个元素的地址,故可以应用数组中的规则及指针+1即可指向数组下一个元素的地址,相应的地址指向对应的元素值。