4.7.1 声明和初始化指针
指针声明必须指定指针指向的数据的类型。
注意:可以在声明语句中初始化指针。在这种情况下,被初始化的是指针,而不是它指向的值。例如int hats=5; int *p=&hats; 此时是将p的值设为了&hats。
下面一段代码演示了如何将指针初始化为一个地址。
#include<iostream>
using namespace std;
int main()
{
int higgens = 5;
int* pt = &higgens;
cout << "Value of higgens = " << higgens << " ; Address of higgens = " << &higgens << endl;
cout << "value of *pt = " << *pt << " ; value of pt = " << pt << endl;
return 0;
}
4.7.2 指针的危险
最重要的一点是,在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。
警告:一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。
4.7.3 指针和数字
指针不是整型,虽然计算机通常把地址当做整数来处理。但在赋值的时候,例如,int *p; p=12345; 这样赋值是不正确的。正确赋值应为:int *p; p=(int*)12345;
4.7.4 使用new来分配内存
在C语言中,可以用库函数malloc()来分配内存;在C++中仍然可以使用,但还有更好的方法,就是new运算符。
例,int *pn=new int;
new int 告诉程序,需要适合存储int的内存。new运算符根据类型来确定需要多少字节的内存。然后,它找到这样的内存,并返回其地址。
如果已经声明了相应类型的指针,则可以使用该指针,而不用再声明一个新的指针。下面一段代码,将演示这个功能。