关于c++指针和物理内存

regarding c++ pointer and physical memory

本文关键字:物理内存 指针 c++ 关于      更新时间:2023-10-16

我有一个澄清,

class Foo
{
}
main()   
{
   Foo obj; //1
   method(obj);
   method1(&obj);
   Foo* obj1;
   method2(&obj1);  //4
}
void method(Foo objfoo) //2
{
}
void method1(Foo* objfoo) //3
{
}
void method2(Foo* & objfoo){}

Q1。它会在主堆栈框架内分配对象吗?

Q2。它会在方法堆栈框架内再创建一个Foo副本吗?

Q3。是否指向主方法中存在的obj中存在的相同对象?

第四季度。这说明了什么?需要解释吗?

这些是按Q1、Q2等排序的,而不是它们在问题中出现的顺序。

  1. 是的。(至少在存在堆栈帧或堆栈的范围内)
  2. 是的,至少在理论上是这样(但在现实中,编译器可能会删除副本)
  3. 是的,method1接收一个指向预先存在的对象的指针
  4. 它正在将obj1的地址传递给method2

旁白:第四季度提到的对method2的调用实际上不起作用。由于obj1被定义为指向Foo的指针,而method2引用指向Foo的指针,因此不需要(显式)获取点的地址来进行调用。这样做会创建一个指向指针的指针,其中method2需要对指针的引用。使用method2(obj1);至少在语法上是正确的(但它是否真的能正确工作还有待商榷)。

Q1:是;

Q4:&表示"的地址"。取一个指针的地址,可以得到一个指向Foo**的指针。

Q2:是的。

Q3:是的。

method2:无效,应为

void method2(Foo** obj);