我了解如何使用scanf(),但是我很难理解scanf()如何访问其他功能及其堆栈框架。我知道必须为scanf()提供一个向其写入数据的地址,但是我认为每个函数在其自己的堆栈框架中都有自己的私有数据。
例如,以简单的程序段为例

#include <stdio.h>
int main() {
 int x;
 x = 2;
 scanf("%d",&x);
 printf("%d",x);
}


在此程序中,main有其自己的堆栈框架,其中局部变量x初始化为2。我的理解是scanf()也有其自己的堆栈框架。我知道scanf()被赋予了x的地址,但是scanf()如何被允许更改main堆栈框架中的数据?

最佳答案

在此程序中,main有其自己的堆栈框架,其中局部变量x初始化为2。


正确。


  我的理解是scanf()也有自己的堆栈框架。


正确。


  Scanf()被赋予x的地址,但是scanf()如何被允许在main的堆栈帧中更改数据?


由谁或什么允许?没有什么可以阻止它这样做的。它有地址。它是在同一过程中。它可以简单地写入该地址。

关于c - scanf()如何将数据写入其他函数的堆栈帧?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51620281/

10-15 01:10