gpt4 book ai didi

c - 函数中的局部变量在再次调用函数时保持其值

转载 作者:行者123 更新时间:2023-11-30 17:08:11 25 4
gpt4 key购买 nike

在这个程序中,当第一次调用p()时,它会打印0(我意识到它可能只在某些系统上打印垃圾)。

但是第二次调用 p() 时,即使再次声明 y ,它也会打印 2 。它似乎保留了第一次调用 p()y 的值。

我很困惑为什么。有人可以帮忙解释一下吗?还有我如何修改 main 函数以使其不执行此操作?

void p ()
{
int y;
printf ("%d ", y);
y = 2;
}
void main ()
{
p();
p();
}

最佳答案

大多数 C 编译器将局部变量存储在堆栈中。您的代码行为如下所示。

-> 第一次调用 p()

1. **int y;** push y in top of stack. (here value y is 0 or garbage according to compiler because it take value of is memory location).
2. **printf ("%d ", y);** print value of y location.
3. **y = 2;** change value of y location with 2.
4. end of function scope of y finish ( i assume you know a variable scope in c) and pop from stack but not reset value of that location.

-> 第二次调用 p()

1. **int y;** push y in top of stack (memory location allocated of variable y is same as first call p() memory allocation of y so that here value y is 2 because in first call we set value 2 in this location)
2. **printf ("%d ", y);** print value of y location.

这就是为什么这里在第二次调用 p() 中打印 2。

供您引用,请参阅以下代码,我在此代码中打印变量的值和内存地址。

无效p()

{

int y;

printf("y的值=%d\n", y);

printf("y的地址=%p\n",&y);

y = 2;

}

无效q(){

int x;

printf("x的值=%d\n",x);

printf("x的地址=%p\n", &x);

x = 8;

}

无效主函数

{

p();

q();

p();

}

关于c - 函数中的局部变量在再次调用函数时保持其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33794168/

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