繁体   English   中英

C 声明混淆

[英]C declaration confusion

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

#1:

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

MyStruct ms;

MyFunction(ms);

和#2:

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

MyStruct ms;

MyFunction(&ms);

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

这样的 function 声明

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

不是有效的 C 声明。

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

本 function 声明

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

是有效的 C 和 C++ function 声明,其中参数的指针类型指向 My8CFDE63311BD59EB66AC96 的 ZA8CFDE63311BD59B66AC9CF 类型的声明。

因此,要调用 function,您需要将运算符 & 应用于传递的 object 以获取指向 object 的指针。

MyStruct ms;

MyFunction(&ms);

所以功能也不一样。

第一个 function 处理 MyStruct 类型的MyStruct而第二个 function 处理指针类型MyStruct *

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

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

我的结构毫秒; 我的功能(毫秒);

请参阅 MyStruct object 的参考。

然而,

void MyFunction(MyStruct* msParam)

{.....}

我的结构毫秒;

我的函数(&ms);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM