指针是储存变量的地址。
在指针中储存地址
每个变量都有自己的地址。即使不知道所给的变量的地址,你也能够在之阵中储存该地址。
例如:int *pAge = 0;
这条语句生命pAge是一个只想整型量的指针。也就是说,pAge被声明为保存一个整型量的地址。
注意pAge是一个变量。当你声明整型变量int型时,它被设置成保存整型量。
在这个例子中pAge被初始化为0,值为0的指针我们称之为空指针。所有的指针在定义时都应该初始化。如果你不知道自己想给指针赋什么值,那就赋为0。没有初始化的指针我们称之为失控指针,这是非常危险的。
注意:一定要对指针初始化
必须把howOld = 50 的地址赋给pAge:
unsigned short int howOld = 50;
unsigned short int *pAge = &howOld;
间接引用运算符
运算符(*)也被称为间接引用运算符。当一个指针被简介引用时,就读取其所保存的地址处的值。普通变量可以直接访问他们的值。如果你新创建了一个名 为yourAge的无符号短整型变量,并且希望把howOld的值赋给这个新变量,你可以这样写:
unsigned short int yourAge;
yourAge=howOld;
指针提供了对变量值的间接访问,指针保存该变量的地址。通过以下语句,你可以使用指针pAge把howOld的值赋给新变量。
unsigned short int youAge;
yourAge = *pAge;
变量pAge前面的间接引用运算符(*)的含义是:“储存在此地址处的值”。这条赋值语句的含义:“把储存在pAge中的地址处的值赋给yourAge”。
new
在C++中使用关键字new分配自由存储区的内存。在new之后是一个你希望分配的对象的类型,这样编译器就知道需要多大的内存。因此,new unsigned short int 在自由存储区中分配了两字节的空间,而new unsigned long 则分配四字节的空间。
new的返回值是内存的地址。他必须被赋给一个指针。要在自由存储区第一一个unsigned short型的变量,可以这样编写代码。
unsigned short int *pPointer;
pPointer = new unsigned short int ;
当然也允许在定义指针时对他进行初始化
unsigned short int *pPointer = new unsigned short int ;
在两种情况下,pPointer只想自由存储区中的一个unsigned short int 型内存。你可以向其他指向变量的指针一样使用他,并把一个值赋给他所指向的内存空间。*pPointer = 72;
delete
当你不再需要一块内存空间时,必须对指向它的指针使用关键字delete。它的作用是释放内存,把他交还给自由存储区,你一定要记住,与所指向的内存区域不同,指针本身是一个局部变量。当声明指针的函数返回时,指针的作用域也就结束了,因此被丢弃了。然而,使用关键字new分配的内存不会被自动释放,于是这块内存不能由其他数据使用。这种情况我们被称之为内存泄漏。这种情况被称为内存泄漏是因为直到程序结束内存才能够恢复使用,就好像计算机丢掉了这一块内存。要把内存释放给自由存储区,使用关键字delete。
访问数据成员
在前面提到的对于局部的Cat类对象通过成员运算符“.”访问它的数据成员和函数。必须先对指向此对象的指针进行间接引用,然后使用成员运算符。因此要访问成员函数GetAge,可以使用以下语句:
(*pRags).GetAge();
使用括号是为了保证在访问GetAge()之前对pRags进行间接引用。