【问题标题】:C declaration confusionC 声明混淆
【发布时间】:2022-01-13 07:59:48
【问题描述】:

这两个参数声明和调用方法有什么区别(如果有的话)?

#1:

void MyFunction(MyStruct& msParam)
{
.....
}

MyStruct ms;

MyFunction(ms);

还有#2:

void MyFunction(MyStruct* msParam)
{
.....
}

MyStruct ms;

MyFunction(&ms);

它们似乎都传递了一个指向变量“ms”的指针,所以我猜测它们在功能上是相同且同样有效的,但在某些情况下是首选的一种风格吗?

【问题讨论】:

  • 第一种情况至少不是C代码。该函数有一个对 C++ 有效但对 C 无效的引用 arg。

标签: c++ c pointers reference function-definition


【解决方案1】:

这样的函数声明

void MyFunction(MyStruct& msParam) { ..... }

不是有效的 C 声明。

它可以是一个有效的 C++ 函数声明,其中参数表示对 MyStruct 类型对象的引用。

这个函数声明

void MyFunction(MyStruct* msParam) { ..... }

是一个有效的 C 和 C++ 函数声明,其中参数具有指向 MyStruct 类型对象的指针类型。

所以要调用该函数,您需要将运算符 & 应用于传递的对象以获取指向该对象的指针。

MyStruct ms;

MyFunction(&ms);

所以功能不一样。

第一个函数处理MyStruct 类型的对象,而第二个函数处理指针类型MyStruct *

【讨论】:

  • 啊,我明白了!我在别人代码的声明中发现了它,但现在我检查它确实是 C++。谢谢你的澄清。
【解决方案2】:
void MyFunction(MyStruct& msParam)
{
.....
}

第一个声明用在 C++ 中,因为 C++ 是面向对象的。所以代码 -

MyStruct 毫秒; 我的函数(毫秒);

引用 MyStruct 对象的引用。

然而,

void MyFunction(MyStruct* msParam)

{ ...... }

我的结构毫秒;

我的函数(&ms);

可以在 C 和 C++ 中使用,因为这里我们将引用和异常指针传递给 MyStruct。

【讨论】:

    猜你喜欢
    • 2010-11-24
    • 1970-01-01
    • 2023-03-12
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    相关资源
    最近更新 更多