当我实现这个函数时,我最初在一行中定义了两个变量'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,这是正确的,但我不知道为什么会有差异。
4条答案
按热度按时间m1m5dgzv1#
这条线
相当于
所以相对于
不同之处在于
a
没有被初始化。在你的代码中,因为你有
执行是不可确定的
p
还没有设置初始值。qlckcl4x2#
它仅仅意味着你刚刚声明了一个变量p,但是你已经声明并定义了变量result,有些人也称之为初始化(case of result)。
变量声明和定义之间的差异:
变量声明是指变量在第一次使用之前首先声明或引入的部分。变量定义是指变量被分配内存位置和值的部分。大多数情况下,变量声明和定义是一起完成的。
现在到了你的问题,也就是说,在一行中声明两个相同类型的变量,这并不重要,除非你定义了它们,这意味着,不是行的不同,给了你不同的答案。
现在我们来看看
在第一个例子中,当你写
int p
时,你只声明了变量,你没有定义它,也没有初始化它,所以你不能预测p的值,因为在这个例子中,它取决于编译器,在大多数编译器中,它显示0。但是在第二个例子中,您定义了p和result两者**,这意味着p按照您的意图显示值0。**
你说的p给出1作为输出..你确定你告诉我们的是p的值而不是结果吗?
xggvc2p63#
你可以这样做:
这条线
就像
u4vypkhs4#
另一个观察结果,虽然可能有点不相关,但却是:
这也是错误的,因为 B 被定义为int数据类型,而不是int *。
因此,一定要确保在一次性定义和赋值给指针时,你应该像这样分离初始化:
或者简单地写: