堆和堆栈上的变量

时间:2013-06-08 01:33:42

标签: c variables stack heap

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

好吧!

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


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

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

在我看来,变量b存储在堆栈中,但我对a。

有一些疑问

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

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

2 个答案:

答案 0 :(得分:3)

b将在堆栈中。

调用square时,a&b的值相同。根据调用约定和编译器优化,该值可以在寄存器中,也可以在堆栈上,或两者中。

答案 1 :(得分:1)

你是对的! b将被推送到堆栈,而a只是指向b的指针,因此b的引用和指针a保存的值是相同的值,即b的堆栈位置。但是,在调用函数后,指针'a'将不会保留在堆栈中 - 它将超出范围,但在调用函数后'b'仍将在堆栈中,尽管它的值将被改变。