C 将指针传递到功能中

c++ passing pointer or not into function

本文关键字:功能 指针      更新时间:2023-10-16

当我函数函数在C 中呼叫C 有什么区别,用指针而不是指针由此:

void Main::Init()
{
    Foo foo;
    Obj obj;
    Obj.someMethod(foo)  // signeture : someMethod(Foo f)
}

void Main::Init()
{
    Foo* foo = new foo();
    Obj obj;
    Obj.someMethod(foo)  // signeture : someMethod(Foo* f)
}

更新
或以下:

 void Main::Init()
    {
        Foo* foo  = new foo();
        Obj obj;
        Obj.someMethod(foo)  // signeture : someMethod(Foo *& f)
    }

在记忆和编译器术语中更好的是什么。实际上,我没有看到两者的任何差异,我从foo

中得到了我所需要的东西
someMethod(Foo f)

f通过实例传递的对象,即 f成为实际参数 foo的副本。someMethodf进行的任何修改都不会更改foo

通常,通过 const Reference someMethod(const Foo& f)传递F会更有效。因此,将避免复制,并在someMethod中使用f的非const方法会导致编译器错误。

someMethod(Foo *f)

f对象的指针。只要实际参数foo是初始化的(与您的示例不同),someMethod进行的任何修改 f指向的对象实际上都适用于foo指向的对象。

someMethod(Foo *& f)

f指向对象指针的引用。这通常用于声明指针类型的输出参数。示例:

void someMethod(Foo *& f)
{
  f = new Foo();
}

作为f是对实际参数Foo* foo的引用,将new Foo的结果分配给函数退出的foo

首先,代码不编译。

在第二个片段中,foo是指针,obj是对象。您正在调用foo.somemethod(obj),当它期望Foo*对象。与第一个片段也一样。

我所看到的意思是:

obj.someMethod(foo);

说明:

在第一个片段中,foo是一个对象。该对象作为副本传递给someMethod函数。(按值调用)。someMethod中对foo的更改不会反映在Main::Init()foo中。

在第二个片段中,foo作为对象的指针发送。它称为"通过引用呼叫"。foo的地址将发送到someMethod,以便可以修改对象或使用

>