An output parameter lets a function return a status and write a computed value.

status return The function return value can say whether the operation succeeded.
output slot A pointer argument gives the function a place to write the result.

Out Parameter

denominator
out_parameter.c
Replay: real traced execution (multi-file project)
#include <stdio.h>

static int divide(int numerator, int denominator, int *result) {
    if (denominator == 0) {
        return 0;
    }
    *result = numerator / denominator;
    return 1;
}

int main(void) {
    int denominator = 2;
    int result = 0;
    int ok = divide(20, denominator, &result);

    printf("ok=%d result=%d\n", ok, result);
    return 0;
}
#include <stdio.h>

static int divide(int numerator, int denominator, int *result) {
    if (denominator == 0) {
        return 0;
    }
    *result = numerator / denominator;
    return 1;
}

int main(void) {
    int denominator = 0;
    int result = 0;
    int ok = divide(20, denominator, &result);

    printf("ok=%d result=%d\n", ok, result);
    return 0;
}
#include <stdio.h>

static int divide(int numerator, int denominator, int *result) {
    if (denominator == 0) {
        return 0;
    }
    *result = numerator / denominator;
    return 1;
}

int main(void) {
    int denominator = 5;
    int result = 0;
    int ok = divide(20, denominator, &result);

    printf("ok=%d result=%d\n", ok, result);
    return 0;
}
  1. denominator ← 2, result ← 0

    11int main(void) {12    int denominator→ 2 = 2; //@denominator=0, 513    int result→ 0 = 0;14    int ok = divide(20, denominator2, &result0);
  2. static int divide(int numerator, int denominator, int *result)

    3static int divide(int numerator20, int denominator2, int *result⟨addr A⟩) {4    if (denominator == 0) {5        return 0;6    }7    *result⟨addr A⟩ = numerator20 / denominator2;8    return 1;9}
  3. result ← 10, ok ← 1

    13    int result = 0;14    int ok→ 1 = divide(20, denominator2, &result→ 10);1516    printf("ok=%d result=%d\n", ok1, result10);17    return 0;18}
    outputok=1 result=10
  1. denominator ← 0, result ← 0

    11int main(void) {12    int denominator→ 0 = 0;13    int result→ 0 = 0;14    int ok = divide(20, denominator0, &result0);
  2. static int divide(int numerator, int denominator, int *result)

    3static int divide(int numerator20, int denominator0, int *result⟨addr A⟩) {4    if (denominator == 0) {
  3. if (denominator == 0)

    3static int divide(int numerator, int denominator, int *result) {4    if (denominator0 == 0) {5        return 0;6    }
  4. ok ← 0

    13    int result = 0;14    int ok→ 0 = divide(20, denominator0, &result0);1516    printf("ok=%d result=%d\n", ok0, result0);17    return 0;18}
    outputok=0 result=0
  1. denominator ← 5, result ← 0

    11int main(void) {12    int denominator→ 5 = 5;13    int result→ 0 = 0;14    int ok = divide(20, denominator5, &result0);
  2. static int divide(int numerator, int denominator, int *result)

    3static int divide(int numerator20, int denominator5, int *result⟨addr A⟩) {4    if (denominator == 0) {5        return 0;6    }7    *result⟨addr A⟩ = numerator20 / denominator5;8    return 1;9}
  3. result ← 4, ok ← 1

    13    int result = 0;14    int ok→ 1 = divide(20, denominator5, &result→ 4);1516    printf("ok=%d result=%d\n", ok1, result4);17    return 0;18}
    outputok=1 result=4