Я предполагаю, что вы назначаете либо до назначения foo1 и foo2. Отправленный вами код присваивает либо текущее значение либо foo1, либо foo2, а не future . Чтобы быть корректным после изменений foo1 или foo2, он должен быть указателем на то, на что он ссылается.
static Foo *foo1, *foo2;
Foo **either;
if(some_variable == 1) {
either = &foo1;
} else {
either = &foo2;
}
Поскольку любой из них теперь является указателем на указатель на объект, вам необходимо разыменовать его перед использованием. Пример:
if(*either == foo1) printf("either is foo1\n");
else if(*either == foo2) printf("either is foo2\n");
else printf("either isn't foo1 or foo2\n");
Этот код позволит либо продолжать указывать на то, что foo1 или foo2 находится после изменения foo1 или foo2.