变量的地址作为值调用传递

时间:2014-01-23 17:12:14

标签: c++ visual-studio-2010

我只是在玩这些功能和参数。

#include <iostream>
using namespace std;

int function(char *str,int b);
int main()
{
       char *str = new char[10];
       memset(str,0,10);

       int a = 10;
       int b = 10;
       function(str,b);
       function(str,a);
}

//FUnction Definition
 int function(char *str,int b)
 {
      cout << &str << "\t" << &b << "endl"

      return 0;
 }

我在VS2010 C ++中编译这段代码, 当我们按值传递某些东西时,会创建一个新值,复制传递的变量中的内容。所以函数体中的b肯定会有不同的地址。 我所看到的是,函数参数在多次调用中保持在同一地址位置。

我猜测的是函数的参数每个都用内存位置映射,其中包含函数上调用的变量

我只是想知道这是否还有别的东西。

2 个答案:

答案 0 :(得分:0)

本地变量的地址可以重复用于后续调用。没错。

答案 1 :(得分:0)

局部变量在内存中位于同一地址的原因是因为您从main -> function进行调用,并且始终以相同的方式调整堆栈以使function

如果您将代码更改为main调用另一个函数然后调用function,那么您会注意到局部变量和参数具有不同的地址,因为它们将位于堆栈框架中在不同的地址。

注意:所有这些都假设您的编译器没有进行优化。