“int a,b =0”和“int a =0;int B = 0”在c++中?

jhkqcmku  于 2023-03-14  发布在  其他
关注(0)|答案(4)|浏览(321)

当我实现这个函数时,我最初在一行中定义了两个变量'p'和'result'。

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

整个代码有一些bug,所以我加了一行测试定义后'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,这是正确的,但我不知道为什么会有差异。

m1m5dgzv

m1m5dgzv1#

这条线

int a, b = 0;

相当于

int a;
int b = 0;

所以相对于

int a = 0;
int b = 0;

不同之处在于a没有被初始化。
在你的代码中,因为你有

while(p < n-1){

执行是不可确定的p还没有设置初始值。

qlckcl4x

qlckcl4x2#

int p,result = 0;

它仅仅意味着你刚刚声明了一个变量p,但是你已经声明并定义了变量result,有些人也称之为初始化(case of result)。

变量声明和定义之间的差异:

变量声明是指变量在第一次使用之前首先声明或引入的部分。变量定义是指变量被分配内存位置和值的部分。大多数情况下,变量声明和定义是一起完成的。
现在到了你的问题,也就是说,在一行中声明两个相同类型的变量,这并不重要,除非你定义了它们,这意味着,不是行的不同,给了你不同的答案。

现在我们来看看

在第一个例子中,当你写int p时,你只声明了变量,你没有定义它,也没有初始化它,所以你不能预测p的值,因为在这个例子中,它取决于编译器,在大多数编译器中,它显示0。
但是在第二个例子中,您定义了p和result两者**,这意味着p按照您的意图显示值0。**
你说的p给出1作为输出..你确定你告诉我们的是p的值而不是结果吗?

xggvc2p6

xggvc2p63#

你可以这样做:

int a,b;
a = b = 0;

这条线

int a,b=0;

就像

int a; int b = 0;
u4vypkhs

u4vypkhs4#

另一个观察结果,虽然可能有点不相关,但却是:

int * a = NULL, b = NULL;

这也是错误的,因为 B 被定义为int数据类型,而不是int *。
因此,一定要确保在一次性定义和赋值给指针时,你应该像这样分离初始化:

int * a = NULL; int * b = NULL;

或者简单地写:

int * a  = NULL, * b = NULL;
  • 希望能有所帮助 *

相关问题