gpt4 book ai didi

c - 带参数函数调用后的栈结构

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

我只是在研究 C 中程序的内存分配。我知道所有的全局变量和静态变量都存储在堆中。此外,堆栈存储所有函数调用。不过,我确实有一个疑问。假设我正在调用以下函数:

int ret;
int num = 10;
int arr[3] = {1,2,3};
int *ptr = &arr[0];
ret = giveNumber(num, ptr);

在这里,我读到函数调用 giveNumer() 的参数也将存储在同一个堆栈中。但是它们将以什么顺序存储?如果我弹出堆栈顶部,哪个参数将首先弹出,numptr

最佳答案

我知道所有的全局和静态变量都存储在一个堆中
不,那不是真的。
根据标准,它们存储在实现定义的内存区域中,通常是数据段和 BSS。

如果我出栈顶,哪个参数先出栈,num or ptr
函数参数的求值顺序是未指定
所以这取决于你的编译器实现。编译器可能会评估以下参数:

  • 从左到右或
  • 从右到左或
  • 任何其他随机顺序

因此您看到的行为和顺序将取决于此。

关于c - 带参数函数调用后的栈结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10076891/

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