A table of string pointers lets one index select a message.

pointer table An array of `const char *` values stores addresses of string literals.
selected string Changing an index chooses a different string without copying text.

String Table

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

int main(void) {
    int index = 1;
    const char *names[3] = {"red", "green", "blue"};
    const char *selected = names[index];

    printf("name=%s\n", selected);
    return 0;
}
#include <stdio.h>

int main(void) {
    int index = 0;
    const char *names[3] = {"red", "green", "blue"};
    const char *selected = names[index];

    printf("name=%s\n", selected);
    return 0;
}
#include <stdio.h>

int main(void) {
    int index = 2;
    const char *names[3] = {"red", "green", "blue"};
    const char *selected = names[index];

    printf("name=%s\n", selected);
    return 0;
}
  1. index ← 1, names ← ⟨addr A⟩, selected ← green

    3int main(void) {4    int index→ 1 = 1; //@index=0, 25    const char *names→ ⟨addr A⟩[3] = {"red", "green", "blue"};6    const char *selected→ green = names[index]green;78    printf("name=%s\n", selectedgreen);9    return 0;10}
    outputname=green
  1. index ← 0, names ← ⟨addr A⟩, selected ← red

    3int main(void) {4    int index→ 0 = 0;5    const char *names→ ⟨addr A⟩[3] = {"red", "green", "blue"};6    const char *selected→ red = names[index]red;78    printf("name=%s\n", selectedred);9    return 0;10}
    outputname=red
  1. index ← 2, names ← ⟨addr A⟩, selected ← blue

    3int main(void) {4    int index→ 2 = 2;5    const char *names→ ⟨addr A⟩[3] = {"red", "green", "blue"};6    const char *selected→ blue = names[index]blue;78    printf("name=%s\n", selectedblue);9    return 0;10}
    outputname=blue