变量作为呼叫按值传递的地址
Adress of Variables passed as call by Value
我只是在玩函数和参数。
#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
,您会注意到本地变量和参数具有不同的地址,就像它们在不同地址的堆栈框架中一样。
注意:所有这些都是假设您的编译器不做和优化。
相关文章:
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- C++类 - 初始化列表 - 递归 - 按值传递
- 将函数参数完美转发到函数指针:按值传递呢?
- 棘手的按值传递和按引用递归问题传递
- 不同于按值传递和常量引用传递的程序集
- 按值传递变量与按引用传递变量具有相同的结果
- 为什么按值传递QStringView比引用常量更快?
- 获取 std::函数以推断按引用传递/按值传递
- 在函数中按值传递 unordered_map/unordered_set 是否有效? C++
- C++/11 auto 关键字是在更有效时推导参数进行按引用传递,还是始终按值传递?
- 使用 enable_if 在按值传递与按引用传递之间更改函数声明
- 防止在按值传递对象(继承)时进行切片
- 按值传递类和结构
- C++按引用传递还是按值传递?
- 为什么在按值返回时创建临时对象,而不是在按值传递给函数参数时创建临时对象
- 可移动但不可复制的对象:按值传递还是按引用传递?
- const-ref传递的模板化参数是否经过优化,以便在足够小时按值传递
- 在C++中指针是按值传递的吗
- shared_ptr构造函数参数是否应按值传递
- 变量作为呼叫按值传递的地址