Archived

This topic is now archived and is closed to further replies.

Use Pointer or Reference?

This topic is 5850 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

A or B is better? Why it is better? A.) int num =10; aaa(num); void aaa(int &temp) { ......... }; B.) int num =10; aaa(&num); void aaa(int *temp) { ......... }; Thx.

Share this post


Link to post
Share on other sites
A is better. However, A is not _always_ better.

In this specific case, A is better because all you want to do is pass the value of a construct to a function without creating a local copy (and also optimize the stack manipulation). Fine. If, however, you wanted to pass an array you would want B (note that arrays are always passed by reference anyways). The difference lies in the internal processing:

void aaa(int &temp)
{
// double temp
temp *= 2;
}
.
void bbb(int *temp)
{
// double temp
*temp *= 2;
}

Note the extra ''*'' in bbb(); it''s necessary to access the value in *tenp rather than the pointer temp. This can be very useful when manipulating arrays and other contiguous memory regions (C-style strings, for example).

Hope that was actually helpful.

[ GDNet Start Here | GDNet FAQ | MS RTFM | STL | Google ]
Thanks to Kylotan for the idea!

Share this post


Link to post
Share on other sites
Thank you!

Are you mean that if i pass array to a function, i am better use pointer than reference?

But i don''t understand that:
"In this specific case, A is better because all you want to do is pass the value of a construct to a function without creating a local copy "

Pointer is also without creating local copy. what are the differents between Pointer and Reference in this case?

Thanks.

Share this post


Link to post
Share on other sites
B is bad, A is worse, a-mon-avis.

A)
int num=10;
aaa(num);
void aaa(const int& temp)
{
//don't twiddle temp
}
Unless you're overloading operators, use constant references. If you're going to twiddle it, tell the user by requiring a pointer to it.


B)
int num=10;
num = aaa(num);
int aaa(int temp)
{
//twiddle temp
return temp;
}
Int are small, so copying them is less expensive than using pointers to them. If you want to twiddle a structure or a class, add a method to the construct.

Magmai Kai Holmlor

"Oh, like you've never written buggy code" - Lee

"What I see is a system that _could do anything - but currently does nothing !" - Anonymous CEO

Edited by - Magmai Kai Holmlor on December 9, 2001 3:55:37 AM

Share this post


Link to post
Share on other sites
Mm.....i know the following program will has same result.

A)
void aaa(int &temp){ temp++ };
int num =10
aaa(num);
cout<
B)
void aaa(int *temp){ (*temp)++ };
int num =10;
aaa(&num);
cout<
My question is what are the differents between them and which one is better?

If the num variable is changed to a large object, which one will run faster and space saving?

Share this post


Link to post
Share on other sites
Use [ source] [ /source] tag to surround code, or use & l t (without the spaces) for a less-than symbol.
(& g t for >)

Neither is faster, they type doesn''t matter, it''s just a different way to write the same thing. It''s my opinion that references are prefered to be const (the expection is operator overloading, where you use non-const references to make the operators work like they are supposed to)

Magmai Kai Holmlor

"Oh, like you''ve never written buggy code" - Lee

"What I see is a system that _could do anything - but currently does nothing !" - Anonymous CEO

Share this post


Link to post
Share on other sites