0

我一直在努力寻找这个问题的答案,但这对我来说有点棘手。

就这样吧!

    int square(int* a){
      return (*a)*(*a)
    }


    int main(){
      int b = 20;  
      square(&b);
    }

我的问题是:存储变量 a 和 b 在哪里?

在我看来,变量 b 存储在堆栈中,但我对 a 有一些疑问。

当您调用 square(&b) 时,您正在传递引用,在这种情况下是堆栈中变量 b 的地址。

然后,函数 square(int* a) 接收一个 (int* a) 参数,这意味着它将接收一个指针,在这种情况下,该指针是堆栈中变量 b 的引用。所以变量 a 的值就是变量 b 的地址。但两者都将存储在堆栈中。我很确定它在堆栈上,但是......或者 b 在堆栈中而 a 在堆中?顺便谢谢。

4

2 回答 2

3

该值b将在堆栈上。

square被调用时,a&b都是相同的值。根据调用约定和编译器优化,该值可能在寄存器中,或在堆栈中,或两者兼而有之。

于 2013-06-08T01:47:48.487 回答
1

你是对的!b会被压入栈中,并且a只是一个指向 的指针b,所以 的引用b和指针持有的值a是同一个值,也就是 的栈位置b。但是,'a'函数调用后指针不会留在堆栈上——它会超出范围,但'b'在函数调用后仍会在堆栈上,尽管它的值会改变。

于 2013-06-08T01:38:20.930 回答