在c ++中,“ int a,b = 0”和“ int a = 0; int b = 0”之间有什么区别?

时间:2019-03-09 10:43:47

标签: c++

当我实现函数时,我最初在一行中定义了两个变量“ p”和“结果”。

void huffman(Node** nodeArray, int n)
{
    int p,result = 0;  
    cout << p << endl;
    sort(nodeArray, p, n); //sort
    while(p < n-1){
        Node* newNode = new Node;
        newNode->fre = nodeArray[p]->fre + nodeArray[p+1]->fre;
        p++;
        result += newNode->fre; 
        nodeArray[p] = newNode;
        sort(nodeArray, p, n);
    } 
    cout << result << endl;
}

整个代码中存在一些错误,因此我在定义后添加一行以测试'p'是否正确。但是输出为1,这是错误的。之后,我尝试在两行中定义两个变量。 `

void huffman(Node** nodeArray, int n)
{
    int p = 0;
    int result = 0;   
    cout << p << endl;
    sort(nodeArray, p, n); //sort
    while(p < n-1){
        Node* newNode = new Node;
        newNode->fre = nodeArray[p]->fre + nodeArray[p+1]->fre;
        p++;
        result += newNode->fre; 
        nodeArray[p] = newNode;
        sort(nodeArray, p, n);
    } 
    cout << result << endl;
}

'p'的输出为0,这是正确的。但是我不知道为什么会有区别。

3 个答案:

答案 0 :(得分:6)

int a, b = 0;

等同于

int a;
int b = 0;

所以,相对于

int a = 0;
int b = 0;

不同之处在于a未初始化。


在您的特定代码中,因为您拥有类似的东西

while(p < n-1){

执行是不确定的-p尚未设置初始值。

答案 1 :(得分:2)

int p,result = 0;

这只是意味着您刚刚声明了变量 p ,但是已经声明并定义了变量结果。有人也称它为初始化(结果的情况)。

变量的声明与定义之间的区别:

变量声明是指在首次使用变量之前先声明或引入变量的部分。变量定义是为变量分配存储位置和值的部分。在大多数情况下,变量声明和定义是一起完成的。

现在问您一个问题,即在定义它们之前是否在一行中声明两个相同类型的单独变量都没有关系。这意味着给您不同的答案不是线的差异。

现在,让我们看看。

在第一个示例中,当您编写int p时,您只是声明了变量。您没有定义它或对其进行了初始化,因此您无法预测p的值,因为在这种情况下,它取决于编译器。在大多数编译器中,它显示为0。

但是在第二个示例中,您已经定义了p并得出两个结果,这意味着p根据您的意图显示的值为0。

然后您说p给出1作为输出。您确定要告诉我们p的值而不是结果吗?

答案 2 :(得分:2)

您可以执行以下操作:

int a,b;
a = b = 0;

线

int a,b=0; 

就像

int a; int b = 0;