我不确定这是如何或为何有效:
#include <stdio.h>
#include<stdlib.h>
#include <limits.h>
#include <iostream>
using namespace std;
int main() {
int min = INT_MAX, min_index;
cout << min <<"\n";
cout << INT_MAX << "\n";
cout << min_index <<"\n";
system("pause");
return 0;
}
min
,INT_MAX
和min_index
的实际输出
我知道INT_MAX
是limits.h
的一部分,因此min
和INT_MAX
是相同的,但min_index没有给出值,为什么它会显示一个值。
答案 0 :(得分:3)
C ++不是一种内存安全的语言。在使用变量之前,无法保证变量已被赋值。
您作为min_index
的打印值看到的是min_index
内存中的值,它恰好是从上次设置内存时遗留下来的。
从这样的初始化变量中读取&#34;未定义的行为&#34;,因为该程序的每次调用都可能导致不同的,意外的结果(取决于最后使用最终分配给的内存的内容) min_index
)。
答案 1 :(得分:1)
在C和C ++等语言中,定义变量时,如:
int x;
为变量分配一小块内存。但是,我们只声明了变量,并没有对其进行初始化,这意味着已分配给变量的内存块仍包含一些以前的程序和操作遗留下来的值。该值称为垃圾值。这可能会导致程序出现错误结果。
为避免这种情况,请声明并初始化变量,如下所示:
int x = 0;
来源: What do you mean by a garbage value in a variable?
另请参阅: How does an uninitiliazed variable get a garbage value?
答案 2 :(得分:0)
因为$ min_index未初始化为指定值,但已将其分配给内存位置。如果打印min_index而不先进行初始化,则该内存位置的值将被解释为min_index类型的数据。
因此,始终建议初始化变量,因为您永远不会知道该内存位置的值是什么。
答案 3 :(得分:0)
你无法初始化min = int_max。由于垃圾值而显示的值