>>199
メモリの動的確保でやるなら

struct vec {
 float* x1;
 float* y1;
 float* z1;
};

struct vec* NewVec(int n){
 size_t sz = sizeof(struct vec) + sizeof(float) * 3 * n;
 struct vec* v = (struct vec*)malloc(sz); // キャストのツッコミはなしで
 v->x1 = v + 1;
 v->y1 = v->x1 + n;
 v->z1 = v->y1 + n;
 return v;
}

〜

struct vec* v = NewVec(10); でベクトル作成
v->x1[0] = 1.0; または (*v).x1[0] = 1.0; でアクセス
free(v); で後始末