Advanced Pointers
String Table
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
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;
}
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
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
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