Macro is a Pre-prosser. The main advantage of using the macro is the speed of the execution of the program (if macro is not used in the program many times or if the program is small).
The main disadvantage of the macro is it increase the size of the program because the pre-processor will replace all the macro name in the program by it actual definition before the compilation of the program.
Difference between pass by reference and pass by value?
When using by reference there is no new variable just a alias to the memory address, if this parameters is not constant it is possible to change the content of that address.
When using by value a new variable will be created in memory and it is impossible to change the original content.