в то время как var является объектом b во время компиляции, компилятор не знает об этом, поэтому вы должны привести его к объекту b или указателю, как это.
(*(b*)var).c = 2;
((b*)var)->c = 2;
Мой учитель информатики объяснил, что лечит два случая при выполнении полиморфизма во время выполнения и во время компиляции
Надеюсь, это поможет.