В C ++ []
и .
имеют более высокий приоритет, чем *
.
Ваша последняя строка
*(p_vs)[0].an_int=0;
в скобках -
*((p_vs[0]).an_int)=0;
Так как p_vs
был объявлен как
vector <a_struct> * p_vs;
, как если бы p_vs
был массивом vector <a_struct>
элементов, поэтому p_vs[0]
является vector<a_struct>
.
И vector<a_struct>
объекты действительно не имеют члена an_int
.
Добавьте несколько паренов, и вы получите то, что хотите.