变量作为呼叫按值传递的地址

Adress of Variables passed as call by Value

本文关键字:地址 按值传递 呼叫 变量      更新时间:2023-10-16

我只是在玩函数和参数。

#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有不同的地址。我看到的是函数参数保留在多个呼叫中的同一地址位置。

我猜测,功能的参数每个都用内存位置映射,WIL包含在函数上调用的变量

我只想知道这是如此,否则还有其他东西。

可以重新使用本地变量的地址以进行后续调用。这没什么错。

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

如果将代码更改为该main,则称为另一个函数,然后称为function,您会注意到本地变量和参数具有不同的地址,就像它们在不同地址的堆栈框架中一样。

注意:所有这些都是假设您的编译器不做和优化。