Ora

What are Formal Parameters and Actual Parameters?

Published in Programming Parameters 4 mins read

In programming, formal parameters and actual parameters are fundamental concepts that define how data is passed to and used within functions (or methods, subroutines). Simply put, formal parameters are the placeholders defined when a function is declared, while actual parameters are the specific values supplied when that function is called.

Formal Parameters

Formal parameters (often just called parameters) are the variables declared within the parentheses of a function's definition or signature. They act as named placeholders that will receive data when the function is invoked.

  • Definition: These are the variables specified in the function header, indicating the type and name of the data the function expects to process.
  • Purpose: They serve as local variables within the function's scope, providing a way for the function to refer to the input data it receives.
  • Key Characteristic: Formal parameters are always variables. They define the structure of the input the function can accept.
  • Example: In a function declared as int calculateArea(int length, int width), length and width are the formal parameters.

Actual Parameters

Actual parameters (also frequently called arguments) are the concrete values, variables, expressions, or even function calls that are passed to a function when it is executed. These values are then assigned to the corresponding formal parameters.

  • Definition: These are the specific pieces of data provided in the function call statement.
  • Purpose: They supply the concrete data that the function will use to perform its operations.
  • Key Characteristics:
    • Actual parameters do not have to be variables.
    • The parameter written in the function call is called an actual parameter.
    • One can use numbers, expressions, or even function calls as actual parameters.
  • Example: If you call calculateArea(10, 5), then 10 and 5 are the actual parameters. If you call calculateArea(side_a, side_b * 2), then side_a and side_b * 2 are the actual parameters.

Comparing Formal and Actual Parameters

Understanding the distinction between these two parameter types is crucial for grasping data flow in modular programming.

Feature Formal Parameters Actual Parameters
Location Function definition/declaration (signature) Function call/invocation statement
Role Placeholders; define expected input types and names Concrete values; provide the actual data for processing
Nature Always variables Can be variables, literal values, expressions, or results of other function calls
Scope Local to the function in which they are declared Defined in the scope where the function call is made
Example (C/C++) void greet(string name): name is formal greet("Alice"): "Alice" is actual

Practical Example

Consider a simple C-like programming function:

#include <stdio.h>

// Function definition with formal parameters 'x' and 'y'
int addNumbers(int x, int y) {
    printf("Inside addNumbers: x = %d, y = %d\n", x, y);
    return x + y;
}

int main() {
    int value1 = 15;
    int value2 = 7;

    // Call 1: Using variables as actual parameters
    int sum1 = addNumbers(value1, value2); // value1 and value2 are actual parameters
    printf("Sum 1: %d\n\n", sum1); // Output: Sum 1: 22

    // Call 2: Using literal values as actual parameters
    int sum2 = addNumbers(100, 25); // 100 and 25 are actual parameters
    printf("Sum 2: %d\n\n", sum2); // Output: Sum 2: 125

    // Call 3: Using an expression as an actual parameter
    int sum3 = addNumbers(value1 * 2, value2 + 3); // value1 * 2 and value2 + 3 are actual parameters
    printf("Sum 3: %d\n\n", sum3); // Output: Sum 3: 40 (30 + 10)

    return 0;
}

In the addNumbers function definition:

  • int x and int y are the formal parameters. They specify that the function expects two integer values as input.

When the addNumbers function is called within main:

  • For sum1 = addNumbers(value1, value2);, value1 and value2 are the actual parameters. The values they hold (15 and 7) are passed to x and y respectively.
  • For sum2 = addNumbers(100, 25);, 100 and 25 are the actual parameters. These literal values are passed directly to x and y.
  • For sum3 = addNumbers(value1 * 2, value2 + 3);, value1 * 2 (which evaluates to 30) and value2 + 3 (which evaluates to 10) are the actual parameters. The results of these expressions are passed to x and y.

This clear distinction enables functions to be modular and reusable, as they can be defined once with formal parameters and then invoked multiple times with different actual parameters to perform varied operations.