指针常与动态内存联系在一起使用,
因为c++在调用new函数时会返回一个指针。
所以对需要动态申请和赋值的数据,定义成指针是最方便的。
指针数组也是这样。
对于一组等待动态分配空间和赋值的数据,使用指针数组。
例子如下:
//******************************************************************************;
//Global Constant Declaration;
const int LETTERS= 26;
//******************************************************************************;
//record declaration;
struct filedata
{
filedata *backwards; //the backward pointer
string word; //word from the text file;
filedata *forward; //forward pointer
};
//******************************************************************************;
void Array_initialization( filedata *arr[LETTERS]);
void AddNode(string str, filedata* arr[LETTERS]);
int main(int argc, char *argv[])
{
filedata * arr[LETTERS]; // 数组成员是指针,(个人估计)此时已经分配空间,对数组名进行运算sizeof(arr)得104。
Array_initialization(arr); //Initialize the array;
}
void Array_initialization( filedata *arr[LETTERS])
{
int count; //*** km: Indenting.
for (count = 0; count < LETTERS; count++)
{
arr[count]= NULL; // arr[count]->word 由申请时的0xcccccccc变为0x00000000. visual 2008下调试
if (arr[count]==NULL)
{
// cout << "NULL!" << count << endl;
}
}
return;
}
void AddNode(filedata* arr[LETTERS])
{
filedata * pointer = NULL;
pointer = new filedata;
... ...
pointer->word = str;
if (arr[n] == NULL)
{
pointer->backwards = NULL;
pointer->forward = NULL;
arr[n] = pointer; // 对数组名进行运算sizeof(arr)仍然得104。
}
else
{
pointer->forward = arr[n]; // 指针重新指向时并未需要进行delete操作。
pointer->backwards = NULL;
arr[n]->backwards = pointer;
arr[n] = pointer;
}
}