In procedural paradigm, to solve a problem usually we use divide-and-conquer strategy. The problem is broken down into many constituent parts. These parts are relatively independent and can be viewed as black boxes. Then, using a procedural programming language such as C, Pascal, Basic, and Fortran, those components are implemented as subroutines, procedures, or functions. These subroutines accept well-defined inputs, regardless who supply the inputs, perform a certain action, and optionally return a specific result value.

By breaking down the program into many subroutines, it veils the complexity of the program so the designer or programmer can focus on the overall flow of the program. In addition, maintaining the program becomes much easier, and ultimately it increases the reusability. Furthermore, the developed subroutines may be used again to develop other programs.

Inputs are passed to precedurs by either passing them by value or by reference. The inputs are passed by value when the procedure is not going to change their content and hence only their values are passed to the procedure. However, when it is required that the procedure changes the content of the inputs, then what is passed is the addresses of the inputs, and this what is called passing by reference.