int foo1(int t[2]) {
    return t[0]+t[1];
}
struct s {
    int f0;
    int f1;
};

int foo2(struct s *f) {
    return f->f0 + f->f1;
}

int foo3(struct s f) {
    return f.f0 + f.f1;
}

struct s2 {
    int f[2];
};

int foo4(struct s2 f) {
    return f.f[0] + f.f[0];
}

int t[2] = {1,2};

int main () {
    foo1(t);
    struct s mys = { 1, 2 };
    foo2(&mys);
    foo3(mys);
    struct s2 mys2 = { { 1, 2 } };
    foo4(mys2);
    return 0;
}
