现在的位置: 首页 > 综合 > 正文

C++指针与动态内存的关系

2013年08月09日 ⁄ 综合 ⁄ 共 1561字 ⁄ 字号 评论关闭

指针常与动态内存联系在一起使用,

因为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;
    }

 

}

 

 

抱歉!评论已关闭.