如果我不使用零将迭代器 i 和 j 初始化,则会发生这种情况。编译器确实通过零来初始化它们,但是不知何故子循环并没有进行迭代。有什么解释吗?
我已经找到了解决方案,但是我在问这背后的原因是什么?
void sortById(int *arr, int size){
for (int i; i<size; i++){
cout << "i = " << i << "\n" ;
for (int j; j<size; j++){
cout << "j = " << j << "\n";
}
}
}
int main(){
int Ids[5] = {15,3,1,10,25};
int size = 5;
sortById(Ids, size);
}
//Output:
i = 0
j = 0
j = 1
j = 2
j = 3
j = 4
i = 1
i = 2
i = 3
i = 4
答案 0 :(得分:0)
这是因为未初始化的变量具有在其上创建的内存段的值,通常这是垃圾。因此,您的循环最好从0x2342FF开始
答案 1 :(得分:0)
简单来说, 不,它不会将其初始化为零。
如果以前的程序未清除内存,而您尝试在函数内部初始化变量,则与该变量关联的内存将在堆栈中分配。而且它不初始化值,它可以保存任何值(由先前的程序使用,也可以为零)。
此值称为“垃圾值”。
详细说明:
每个函数在由编译器编译时,然后分为两部分:
有关变量应存储在何处的信息可以在存储类说明符中找到。在storage class specifier
上查看更多信息并且默认情况下,存储类为“自动”,这意味着变量存储在函数的堆栈部分中。在堆栈中初始化事物时,与该变量关联的值是未知的或“垃圾值”,这意味着它可能为零,也可能不为零。无法保证任何一个值都可以被赋予。