Advanced Pointers
Out Parameter
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
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;
}
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);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}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
denominator ← 0, result ← 0
11int main(void) {12 int denominator→ 0 = 0;13 int result→ 0 = 0;14 int ok = divide(20, denominator0, &result0);static int divide(int numerator, int denominator, int *result)
3static int divide(int numerator20, int denominator0, int *result⟨addr A⟩) {4 if (denominator == 0) {if (denominator == 0)
3static int divide(int numerator, int denominator, int *result) {4 if (denominator0 == 0) {5 return 0;6 }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
denominator ← 5, result ← 0
11int main(void) {12 int denominator→ 5 = 5;13 int result→ 0 = 0;14 int ok = divide(20, denominator5, &result0);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}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