奇怪的C ++指针声明

时间:2014-07-21 05:35:49

标签: c++ pointers declaration

我正在编写一个关于深度优先搜索算法的小程序。在程序结束时,需要删除内存。

for(int i = 0; i < V; i++) {
    Vertex* temp1, *temp2 = graph->adjacentList[i];
    while(temp1 != NULL) {
        temp2 = temp1->next;
        delete temp1;
        temp1 = temp2;
    }
}

此代码删除图表的相邻列表。代码可以编译和运行但是 运行时错误。错误消息是

  

正在使用变量'temp1'而未初始化。

请查看另一段代码:

for(int i = 0; i < V; i++) {
    Vertex* temp1 = graph->adjacentList[i];
    Vertex* temp2 = graph->adjacentList[i];
    while(temp1 != NULL) {
        temp2 = temp1->next;
        delete temp1;
        temp1 = temp2;
    }
}

此代码可以编译和运行,没有任何错误消息! 唯一的区别是声明。这很奇怪,至少对我而言。

任何人都可以想出一个主意吗?

2 个答案:

答案 0 :(得分:10)

Vertex* temp1, *temp2 = graph->adjacentList[i];

相当于

Vertex *temp1;
Vertex *temp2 = graph->adjacentList[i];

您可以看到为什么会出现temp1未初始化的错误。

答案 1 :(得分:5)

在此代码段中:

Vertex* temp1, *temp2 = graph->adjacentList[i];

您实际上并未初始化temp1

请考虑以下事项:

int a, b = 2;

什么是a?它不是2,它是未初始化的。你的第二个实现更正确。