#include // struct with only an array struct StructOfArray { int c[3]; }; struct S { int x; }; void foo(struct StructOfArray a) { a.c[0] += 1; } void bar(struct S ar[]) { struct S new; new.x = ar[0].x+1; ar[0] = new; } int main() { struct StructOfArray a; a.c[0] = 1; a.c[1] = 2; a.c[2] = 3; printf("%d\n", a.c[0]); // 1 foo(a); printf("%d\n", a.c[0]); // 1, so pass struct including array by copy // array with just one struct struct S sa[1]; sa[0].x = 1; printf("%d\n", sa[0].x); // 1 bar(sa); printf("%d\n", sa[0].x); // 2, so pass array of structs by reference }