void funcParameterAsReference(int& inputOrOutput)
{
inputOutputVal = 5;
}
int myInt = 0;
funcReference(myInt);
OR
void funcParameterAsPointer(int* inputOrOutput)
{
*inputOutputVal = 5;
}
int myInt = 0;
funcPointer(&myInt);
My rule of thumb is:
Use pointers if you want to do arithmetic with them or if you ever have to pass a NULL-pointer.
Use references otherwise. So for input parameter use const reference and for output parameter use plain reference.
As input parameter :
void func(const int& input);
As output parameter :
void func(int& Output);
Why should pass-by-reference be used instead of pass-by-pointer? The most obvious reason is that a reference cannot be null.
In a function that takes a pointer, you have to check that the pointer is not null before you use it, at least with a debug assertion. During a proper code review you have to analyze more code to be sure that you don't accidentally pass a null pointer to a function that doesn't expect one. I've found that it takes much longer to review functions that take pointer arguments for this very reason; it's so much easier to get it wrong when using pointers.
One advantage of using pointer as a parameter is when you have to add a new parameter to an existing function (for whatever reason). This way you can pass NULL to it, if it doesn't use the parameter in the implementation (definition)
void myFunc1(int* inp);
void myFunc2(int* inp);
int main()
{
int inp = 0;
myFunc1(&inp); // You can't pass NULL to myFunc1 because it uses inp in the implementation. If NULL is passed,
// it will crash.
// e.g.
// int* inp = NULL;
// myFunc1(inp);
// OR
// myFunc1(NULL);
cout << "inp = " << inp << endl;
myFunc2(NULL); // You can pass NULL to myFunc2 because it doesn't use inp in the implementation
system("PAUSE");
return 0;
}
void myFunc1(int* inp)
{
*inp = 99;
cout << "I am in myFunc1" << endl;
}
void myFunc2(int* inp)
{
cout << "I am in myFunc2" << endl;
}
Ref:
http://stackoverflow.com/questions/4028413/out-parameters-and-pass-by-reference
No comments:
Post a Comment