C 将指针传递到功能中
c++ passing pointer or not into function
当我函数函数在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
的副本。someMethod
对f
进行的任何修改都不会更改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
,以便可以修改对象或使用
相关文章:
- 如何定义和设置指向模板类方法的功能指针
- 将状态传递给功能指针
- 如何使用结构内的功能指针调用私有函数
- 功能指针不起作用(C )
- 将C 方法作为功能指针传递
- 优化调用一系列功能指针
- C 功能指针和成员功能指针
- 当直接分配时,为什么此功能指针分配起作用,而不是与有条件的操作员一起使用
- 功能指针的静态初始化
- 功能指针参数参数转换为const
- 使用lambda在功能指针铸造时双免费
- 如何在两个类之间使用功能指针
- exc_bad_access on for loop(数组功能指针)
- 如何通过功能指针调用派生方法
- 虚拟功能指针指向派生类中的函数
- C :铸造成员功能指针
- 指向成员功能的功能指针
- 正确施放以指向返回功能的函数的功能指针
- 当用作模板参数时,功能指针是否需要指向具有外部链接的函数
- 在堆中创建功能指针的数组