简体   繁体   中英

C declaration confusion

What is the difference (if any) between these two parameter declarations and calling methods?

#1:

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

MyStruct ms;

MyFunction(ms);

And #2:

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

MyStruct ms;

MyFunction(&ms);

They both seem to pass a pointer to the variable 'ms' so I'm guessing that functionally they are the same and equally efficient but is one style preferred for some occasions?

Such a function declaration

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

is not a valid C declaration.

It can be a valid C++ function declaration where the parameter means a reference to an object of the type MyStruct.

This function declaration

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

is a valid C and C++ function declaration where the parameter has pointer type to an object of the type MyStruct.

So to call the function you need to apply the operator & to the passed object to get a pointer to the object.

MyStruct ms;

MyFunction(&ms);

So the functions are not the same.

The first function deals with an object of the type MyStruct while the second function deals with the pointer type MyStruct * .

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

The first declaration is used in C++, because C++ is Object Oriented. So the code -

MyStruct ms; MyFunction(ms);

Refer a reference of MyStruct object.

Whereas,

void MyFunction(MyStruct* msParam)

{..... }

MyStruct ms;

MyFunction(&ms);

Can be used in C and C++ both, because here we are passing a reference and excepting pointer to MyStruct.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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