gpt4 book ai didi

c - 函数中的变量是否可以保存 C 中函数旧调用的旧值?

转载 作者:太空宇宙 更新时间:2023-11-04 00:59:58 25 4
gpt4 key购买 nike

我有这样的事情:

void test(int iter){    
int i;
if(iter>3){
i=5;
printf("%d",i);
}else{
printf("%d",i);
}
return;
}
int main(){
test(5);
test(2);
return 1;
}

这只是一个例子。如果至少 iter 大于 3,是否有可能在主变量 i 调用时保持值 5(在内存中)?我知道这不正常。但是我的程序中有一个函数(我没有执行此操作的静态变量)可以执行此操作。所以也许这个变量每次初始化的地址都是一样的(所以我得到的是旧值)?或者会发生什么?我不想保留旧的值(value)或其他东西。我只是好奇:这怎么可能?

最佳答案

如果 i 存储在堆栈的某个位置,并且该位置未被修改,则 i 将保留其值。

假设 i 甚至存储在堆栈中(优化可能会消除这一点),如果有中断使用堆栈(或者可能是由于时间片的上下文切换),则堆栈区域堆栈指针下方将被覆盖。有些编译器可能会填充堆栈区域,通常是在 Debug模式下。处于 Debug模式的 Visual Studio 将通过上述代码捕获未初始化变量的使用情况。

关于c - 函数中的变量是否可以保存 C 中函数旧调用的旧值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44319066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com