5.2 指针变量的声明与初始化
指针变量的值为内存地址。通常变量直接包含特定值,而指针则包含特定值变量的地址。因此可以说,变量名直接(directly)引用数值,而指针间接(indirectly)引用数值(如图 5.1 通过指针引用数值称为间接引用。
指针和任何其他变量一样,应先声明后使用。下列声明:
int *countPtr, count;
声明变量 countPtr 的类型为 int*(即指向整型值的指针),或者说成 countPtr 是 int 的指针 或 countPtr 指向整数类型的对象。变量 count 声明为整数,而不是整型值的指针。声明中的 * 只适用于 countPtr。
声明为指针的每个变量前面都要加上星号(*)。例如,下列声明:
float *xPtr, *yPtr;
表示 xPtr 和 yPtr 都是指向 float 值的指针。声明中以这种方式使用 * 时,它表示变量声明为指针。指针可以声明为指向任何数据类型的对象。
常见编程错误 5.1
假设对指针的声明会分配到声明中逗号分隔的指针变量名列表中的所有指针变量名,从而将指针声明为非指针。声明为指针的每个变量前面都要加上星号(*)。
编程技巧 5.1
尽管不是必需的,但在指针变量名中加上 Ptr 字样能更清楚地表示这些变量是指针,需要相应的处理。
图 5.1 直接和间接引用变量
指针应在声明时或在赋值语句中初始化。指针可以初始化为 0、NULL 或—个地址。数值为0或NULL的指针不指任何内容。NULL 是头文件 <iostream.h>(和另外几个标准库头文件)中定义的符号化常量。将指针初始化为 NULL 等于将指针初始化为 0,但 C++ 中优先选择 0。指定0时,它变为指针的相应类型。数值0是惟一可以不将整数转换为指针类型而直接赋给指针变量的整数值。5.3 节将介绍将变量地址赋给指针。
测试与调试提示 5.1
初始化指针以防止其指向未知的或未初始化的内存区。