Я немного смущен следующим утверждением в реализации:
void add(char *prefix[NPREF], char *suffix) {
State *sp;
sp = lookup(prefix, 1);
//addsuffix(sp, suffix);
printf("size of prefix %d",&prefix);
printf("size of prefix %s", prefix + 1);
printf("size of prefix %d \n", &prefix+1);
for (int i = 0; i < NPREF; i++)
printf("%s \n" , prefix[i]);
printf("memmove \n");
memmove(prefix, prefix + 1, (NPREF - 1) * sizeof(prefix[0]));
prefix[NPREF - 1] = suffix;
for (int i = 0; i < NPREF; i++)
printf("%s \n", prefix[i]);
}
mmemove(prefix, префикс + 1, (NPREF - 1) * sizeof(prefix[0]));
Итак, префикс — это указатель типа char. В этом смысле префикс + 1 — это ссылка на следующий символ в массиве, не так ли?
Как это работает правильно? Я читал о memmove и читал об указателях, но не смог самостоятельно изучить поведение этой функции добавления.